169it科技资讯


当前位置:  数据库>其它
本页文章导读:
    ▪gc buffer busy/gcs log flush sync与log file sync       对于log file sync(本质上是 write redolog慢)引发gc buffer busy acquire /release 集群等待事件的这个命题的真伪,其实Oracle在开发性能调优组件ADDM时一早给了我们答案: ADDITIONAL INFORMATION: 如果你在ADDM(?.........
    ▪让你的PL/SQL更好用      一 .SQL语句字符全部大写 信息系统的核心是数据库,系统出问题时最先要查的就是SQL语句,怎样在浩瀚的日志中快速找到那条SQL语句是件比较痛苦的事情。 SQL语句全部大写并不能彻底解决这.........
    ▪ADO.NET中的非脱机数据库查询        数据库查询总是很让人纠结,以前用的也不多,就是那么几个语句,来回倒,但是在学习的过程中发现,发现一个真理“搞不懂的问题,总是要牵绊你”,这就好比,“出来混,总是要.........

[1]gc buffer busy/gcs log flush sync与log file sync
    来源: 互联网  发布时间: 2013-11-15

这篇博文整理自我的帖子: RAC中的gc current block busy与redo log flush

 

对于log file sync(本质上是 write redolog慢)引发gc buffer busy acquire /release 集群等待事件的这个命题的真伪,其实Oracle在开发性能调优组件ADDM时一早给了我们答案:

 

RECOMMENDATION 2: Host Configuration, 12% benefit (507182 seconds)
ACTION: Investigate the possibility of improving the performance of I/O
to the online redo log files.
RATIONALE: The average size of writes to the online redo log files was
40 K and the average time per write was 10 milliseconds.

ADDITIONAL INFORMATION:

Waits on event “log file sync” were the cause of significant database
wait on “gc buffer busy” when releasing a data block. Waits on event
“log file sync” in this instance can cause global cache contention on
remote instances.

 

如果你在ADDM(?/rdbms/admin/addmrpt)中找到上述文字,那么基本可以确认gc buffer busy的源头是log file sync(虽然本质上不是),那么优先解决log file sync的问题; log file sync 当然有少数的bug存在,但更多的是存储、板卡、链路等硬件因素造成的。解决了log file sync后,那么gc buffer busy往往也就解决了。

 

gc current block busy 等待是RAC中global cache全局缓存当前块的争用等待事件, 该等待事件时长由三个部分组成:

Time to process current block request in the cache= (pin time + flush time + send time)

gc current block flush time
The current block flush time is part of the service (or processing) time for a current block. The pending redo needs to be flushed to the log file by LGWR before LMS sends it. The operation is asynchronous in that LMS queues the request, posts LGWR, and continues processing. The LMS would check its log flush queue for completions and then send the block, or go to sleep and be posted by LGWR. The redo log write time and redo log sync time can influence the overall service time significantly.
flush time 是Oracle为了保证Instance Recovery实例恢复机制,而要求每一个current block在本地节点local instance被修改后(modify/update) 必须要将该current block相关的redo 写入到logfile 后(要求LGWR必须完成写入后才能返回),才能由LMS进程传输给其他节点使用。

 

而gc buffer busy acquire/release 往往是 gc current block busy的衍生产品, 当同一实例内的 多个进程并发地访问同一个数据块时 , 首先发起的进程 将进入 gc current block busy的等待 ,而在 buffer waiter list 上的后续进程 会陷入gc buffer busy acquire/release 等待(A user on the same instance has started a remote operation on the same resource and the request has not completed yet or the block was requested by another node and the block has not been released by the local instance when the new local access was made), 这里存在一个排队效应, 即 gc current block busy是缓慢的,那么在 排队的gc buffer busy acquire/release就会更慢:

Pin time = (time to read the block into cache) + (time to modify/process the buffer)
Busy time = (average pin time) * (number of interested users waiting ahead of me)

不局限于current block (reference AWR Avg global cache current block flush time (ms)), cr block(Avg global cache cr block flush time (ms)) 也存在flush time。

可以通过 设置_cr_server_log_flush to false(LMS are/is waiting for LGWR to flush the pending redo during CR fabrication. Without going too much in to details, you can turn off the behaviour by setting _cr_server_log_flush to false.) 来禁止cr server flush redo log,_gc_log_flush(if TRUE, flush redo log before a current block transfer)来让current block transfer不用flush redo。 但是上述2个参数是有其副作用的……….. 大多数情况不要考虑去设置它们,用它们是个馊主意。

 

_gc_split_flush if TRUE, flush index split redo before rejecting bast FALSE  ==> 控制index split redo flush,默认为FALSE

 

 

以上告诉我们 IO 在RAC中是十分重要的,特别是log file的write性能, 其重要性不亚于CPU 和 Interconnect network。

 


    
[2]让你的PL/SQL更好用
    来源: 互联网  发布时间: 2013-11-15
一 .SQL语句字符全部大写

信息系统的核心是数据库,系统出问题时最先要查的就是SQL语句,怎样在浩瀚的日志中快速找到那条SQL语句是件比较痛苦的事情。 SQL语句全部大写并不能彻底解决这一问题,但在一堆代码中间找一行全部大写的字符相对容易些,你的眼睛会感谢你。

设置方法:菜单Tools --> Preferences --> Editor --> Keyword Case --> Uppercase

二. SQL Window中根据光标位置自动选择语句 

设置方法:Tools -->Preferences --> Window Types --> SQL Window,将AutoSelect statement选中即可。注意,每条语句后面要加分号。

三. 自定义快捷键  
设置方法:菜单Tools --> Preferences --> Key Configuration   找到想要设置的快捷键,直接键盘操作即可.

设置对比:
未设置前:执行语句为,选中要执行的语句,然后按默认的快捷键F8.
设置   SQL Window中根据光标位置自动选择语句 然后自定义快捷键,即可达到相关操作.
设置后操作:执行语句 为:将光标移动到要执行的语句位置,然后按相应的快捷键.

步骤如下:
1.) SQL Window中根据光标位置自动选择语句 Preferences --> Window Types --> SQL Window,将AutoSelect statement选中
2.)自定义快捷键  Tools --> Preferences --> Key Configuration   找到想要设置的快捷键,直接键盘操作,如我的设置为shift+Enter.即安这个快捷键时,执行语句.

其它相关设置:

设置字体:
Tools --> Preferences-->字体

设置颜色:
菜单Tools --> Preferences --> Editor

记住密码 
设置方法:菜单Tools --> Preferences --> Oracle --> Logon History --> Store With Password
作者:communicate_ 发表于2013-3-20 11:26:31 原文链接
阅读:38 评论:0 查看评论

    
[3]ADO.NET中的非脱机数据库查询
    来源: 互联网  发布时间: 2013-11-15
 

数据库查询总是很让人纠结,以前用的也不多,就是那么几个语句,来回倒,但是在学习的过程中发现,发现一个真理“搞不懂的问题,总是要牵绊你”,这就好比,“出来混,总是要换的”,以前的知识没有学踏实,现在必须补回来。

一、数据库连接。

很简单,不多说,只需要一下几步。

 1、创建连接字符串——connectionstring。

2、生成Sqlconnection对象。

3、打开sqlconnction对象——(进行操作)

4、(操作完毕)——关闭sqlconnction对象

代码如下

'定义连接字符串
 Dim strconn  as string =  "Data Source=xiaohong—pc; Initial Catalog=shujukumingcheng;user id=sa; password=mima"  
 '定义连接对象
 Dim conn As New SqlConnection(strconn)
'打开连接
If (conn.State =ConnectionState.Closed) Then
    conn.Open()
End If
'关闭连接
conn.Close()
 

二、数据库查询

这里主要介绍非脱机数据库查询。

1、使用sqlcommand

 

(1)、创建SqlCommand对象——三种方式

 

A、直接New一个新的sqlcommand对象。

Dim cmd asnew sqlcommand()

Cmd.connection=conn

Cmd.commandtext=strsql

 

B、使用参数化构造函数

Dim cmd asnew sqlcommand(conn,strsql)

 

C、使用connection对象创建

Dim cmd=conn.createcommand()

Cmd.commandtext=strsql

 

总结:这里要说明的两点:数据库命令对象(sqlcommand)不是单独存在的,要依附于连接对象,

一定要设置sqlcommand的connection属性;有命令对象,执行就要设置commandtext,它执行内容,否则毫无意义。

 

(2)、使用Sqlcommand执行查询

 

A、执行返回行的查询

使用sqlcommand的executereader方法,返回一个sqldatareader对象,通过这个对象来检查查询的结果。

sqldatareader是一行一行读取数据库中的记录,且一次只读取一行数据。

使用:dim reader assqldatareader =cmd.executereader()

优点:执行速度快。

缺点:不可返回,读取下一行数据后,上一行数据就会消失。

注意:执行完后,关闭sqldatareader。

 

分析:虽然一次只可以读取一行记录,但是在数据库查询的时候,遇到返回结果集是多行记录的时候,如果不适用dataset或者datatable之类的方法时,我们也是可以使用reader的。这就需要我们每次在取出

    
最新技术文章:
▪gc buffer busy/gcs log flush sync与log file sync    ▪让你的PL/SQL更好用    ▪ADO.NET中的非脱机数据库查询
▪参数job_queue_processes与Oracle jobs    ▪11gR2游标共享新特性带来的一些问题以及_cursor...    ▪_library_cache_advice和latch:shared pool、latch:shared poo...
▪SQL: Date Utility    ▪DB2 分区表增加分区    ▪DB2第一步 — 创建表
▪oracle 数据库    ▪插入10万条记录测试    ▪rebuild index VS. rebuild index online
▪如何处理undo tablespace 表空间太大的问题    ▪ado执行存储过程中包含结果集获取输出参数为...    ▪oracle函数的demo
▪Entity Framework 学习建议及自学资源    ▪存储过程的编写    ▪Linux/Unix shell 自动发送AWR report(二)
▪第二章 Oracle恢复内部原理(基础数据结构)    ▪Redis源码学习之【Tcp Socket封装】    ▪Java Jdbc减少与Oracle之间交互提升批量处理性能...
▪南大通用GBase8a Vs Oracle11g 单机测试亲测    ▪oracle 中行列转换    ▪rhel下安装oracle10g+asm---测试环境搭建
▪Redis系列-主从复制配置    ▪MySQL索引与查询优化    ▪INDEX受到NULL值的影响
▪测试人员的SQL语言 系列    ▪SQL数据库基本语句    ▪MySQL Replication常见错误整理[持续更新...]
▪eclipse下建立esper的demo    ▪把oracle rac 转化为单机数据库    ▪Redis系列-存储篇sorted set主要操作函数小结
▪基本的SQL*Plus报表和命令    ▪druid简单教程    ▪11g调度--scheduler使用
▪EF基础一    ▪db2存储过程中循环语句while do的continue有没有...    ▪oracle 创建DBLINK
▪DB2数据库备份还原    ▪Warning: prerequisite DBD::mysql 1 not found错误解决方...    ▪innotop性能监视mysql,innodb工具
▪数据迁移:DataGuard配置    ▪QX项目实战-19.跨库数据同步    ▪Mysql EXPLAIN
▪Oracle 11g AWR 系列七:Active Session History (ASH) 报...    ▪Oracle 11G新特性(共36个)    ▪父子节点问题
▪OEM简介及按钮乱码问题    ▪NoSql之MongoDB的常用类管理    ▪ORA-39700: database must be opened with UPGRADE option
▪node.js 访问redis数据库,pub/sub    ▪使用DBMS_REDEFINITION在线重定义分区表    ▪SQL Developer 使用问题与解决方法汇总
▪oralce 11g dataguard 概念    ▪ORA-30004 错误处理    ▪oracle分组函数rollup,cube
▪Sql Developer 使用问题与解决方法汇总    ▪Configure Oracle Dataguard Primary-ASM to Physical-ASM    ▪Oracle Data Guard 理论知识
▪Control File 恢复    ▪Oracle数据文件收缩    ▪Oracle 11g AWR 系列五:如何生成 AWR 报告?
▪Wireshark数据包分析实战(第2版)    ▪MySql用户权限控制    ▪db2和oracle查询序列区别
▪更新blob字段的存储过程    ▪MySQLReport分析报告三    ▪DB2中的序列
▪Oracle中DBMS_RANDOM.STRING 的用法    ▪SQL SERVER无法安装成功,sqlstp.log文件提示[未发...    ▪Data Guard 部署物理备库的 10 大注意事项
▪万能数据库查询分析器使用技巧之(九)    ▪SQL 自定义Split函数    ▪视图 v$sql,v$sqlarea,$sqltext,v$sqltext_with_newlines 的...
▪Data Guard Standby_archive_dest 和 Log_archive_dest_n 的...    ▪机房收费系统数据库设计(一)    ▪利用putty的SSH tunnel连接Oracle
▪DBCA建库偶遇ORA-27125    ▪使用PowerPivot建立简单的分析模型    ▪Linux/Unix shell 自动发送AWR report
▪写入到blob字段的存储过程    ▪关于JDBC中ResultSet接口的一点细节探究    ▪Data Guard 配置 Standby Redo Log
▪linux下redis的安装    ▪windows下redis的安装    ▪手动创建数据库步骤(简单翻译官方文档)
▪Ubuntu安装Mongodb    ▪SQL CLR应用    ▪redis的配置文件参数--详细说明
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号