sqlplus连接的三种方式,故障诊断

日期:2019-11-19编辑作者:澳门金莎娱乐手机版

故障诊断 | 系统级追踪诊断方法及案例分享,故障诊断案例

点击上方蓝色文字关注↑↑↑↑↑

所谓操作系统,是应用程序与服务器硬件进行沟通的中间层。应用程序的所有操作,都是和操作系统进行沟通交互。操作系统负责将所有交互转化为设备语言,进行硬件交互。

我们在进行Oracle故障调试和内核原理工作的时候,经常需要了解后台运行的动作和细节。一些故障场景,如ORACLE后台进展慢、程序无法启动、无法登陆、相同环境执行结果却大不相同等问题,就需要操作系统级别监控,检查定位问题。

Oracle自身已经提供了很多这类型的工具,如oradebug、各种等待事件和跟踪方式。此外,各类型的操作系统提供出很多系统级别工具,帮助我们进行监控。

 

我们先来看一个简单的示例:

LGWR进程写 online redo log是否用到缓存?

这里的这个缓存不是指数据库缓存,操作系统的文件缓存,如果对这个问题不明白,我们先看另外一个问题,我们如果怀疑存储有问题,经常会使用DD命令对磁盘进行测试,相关命令如下所示,那这个命令对磁盘的操作是直接写磁盘还是把数据写到文件缓存里去?

我们来实地进行测试验证看一下,这是在我电脑虚拟机上的一个测试结果,DD了2G的文件,花了4.99秒的时间,实际上这个命令结束的时候数据没真正写到磁盘上去,对于磁盘的写到缓存就返回了。我们另外看一条命令

这里加了一个标志,就是ofag=sync,加完这个标示之后,我们发现写磁盘的速度下降了,写2G的文件花了8秒,多用了60%的时间。这就是文件系统缓存的作用,文件系统缓存大大增加了主机的性能。

我们现在回到之前那个问题,LGWR进程写redo log 会不会用到缓存呢?我们使用strace –p命令来跟踪LGWR进程,为方便观察我们添加一组新的redo日志组并进行切换。

通过分析TRACE信息我们发现,LGWR进程对online redo log打开使用了o_sync标示,该标示表示直接写入存储设备。

TRUSS/TUSC/STRACE是什么?

下面我引用一下TRUSS的官方解释,TUSC与STRACE工具功能基本一样。

它是一个在系统层处理复杂问题非常有用的工具,用来跟踪一个进程的系统调用或者信号产生的情况。适用于不同的系统环境。

它们适用于不同的Unix环境:

•      Truss : AIX,Solaris

•      Tusc  :HP-Unix(需单独安装)

•      Strace:Linux

Truss常用参数介绍

参数 介绍
-a
显示在每一执行系统调用中传递的参数字符串。
-c 计数跟踪系统调用、故障和信号而不是逐行显示跟踪结果。跟踪命令终止或 truss 中断时生成摘要报告。若还使用 -f 标志,计数包含所有跟踪的系统调用、故障和子进程信号。
-d 每行输出包含时间戳记。时间从跟踪开始以每秒显示。跟踪输出的第一行显示测量单个时间戳记的基本时间。缺省不显示时间戳记。
-D 每行输出显示增量时间。增量时间表示从由该线程引起的最后报告事件起计时引起事件的 LWP 的逝去时间。缺省不显示增量时间。
-e 显示在每一执行系统调用中传递的环境字符串。
-f 跟在 fork 系统调用产生的所有子进程之后,并包含跟踪输出中的信号、故障和系统调用。 通常,仅跟踪第一级命令和进程。如果指定 -f 标志,进程标识与每行跟踪输出一起显示哪个进程执行系统调用或接收信号。
-l 显示有关 LWP 进程的标识(线程标识)及 truss 输出。输出中缺省不显示 LWP 标识。
-o 指定用于跟踪输出的文件。缺省时输出指向标准错误。
-p 将参数作为一列现存进程的进程标识而不是要执行的命令解释到 truss。 倘若进程用户标识或组标识与用户的用户标识或组标识匹配或者用户是特权用户,truss 控制并开始跟踪每个进程。

Tusc常用参数介绍

Strace常用参数介绍

参数 介绍
-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程. 
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-q 禁止输出关于脱离的消息.
-r 打印出相对时间关于,,每一个系统调用.
-t 在输出中的每一行前加上时间信息.
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 微秒级输出,以秒了表示时间.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.

下面我们看两个简单的使用示例:

首先是使用strace –tt date来跟踪date命令,使用-tt参数在每一行的行头上加上时间信息,到微秒级别。

另外一个示例就是使用strace –d cate命令统计所有函数调用的次数及总时间占用,这个对于命令跟踪的分析统计非常有用

一个SQLPLUS连接慢的问题

接下来我们来看一个案例,这个案例是一个SQLPLUS连接慢的问题,AIX 7.1的操作系统,11.2.0.3 两节点RAC数据库,检查硬件的安装环境没有问题,重新配置环境变量也不能解决问题。

对于这种问题,我们首先要进行一些排查,排除一些可能性:

1、  我们看一下使用sqlplus/ as sysdba慢不慢,经过反馈,sqlplus / as sysdba也慢,连接时间要5秒左右。

2、  远程连接慢不慢?

  1. 本地使用远程连接慢不慢  sqplus username/[email protected] 澄清: 测试也慢,慢约5秒钟左右。

  2. 其它主机使用远程慢不慢?澄清:同样也慢, 慢约5秒钟左右。

以上判断表明这个连接慢并非一定和Listener有关,同时也可以排除网络问题引起的监听连接慢,所以先需要解决sqlplus / as sysdba 慢的问题,很大可能在ORACLE数据库的连接处理机制上面。

我们使用TRUSS命令去跟踪跟踪sqlplus / as sysdba连接命令,发现不断出现sigpromask、_sigaction及thread_setmystate函数调用。

那这些函数代表什么?

之后对这些函数进行分析,其主要功能如下:

We see in that truss that main reason weare waiting is that the forked thread is looping on some signal handlingmodification :

 They impact the way memory isconfigured (read/write protected, guard pages...)

通过上述分析发现,连接的时候慢与内存页的分配有关,通过进一步检查内存参数发现,pre_page_sga设置为true。接下来通过测试可以重现这个问题,实际验证的确如此:设置为true,问题重现,设置为false,问题消失,并且发现这个参数为True的情况下,SGA内存越大连接变慢的越明显。

这种行为正常吗?

通过查询MOS文档Notes 289585.1,我们了解知这个行为是正常。

关注本公众号,回复:prelection,你可以找到本文的相关视频文档。

相关阅读:

DBA生存警示:系统存储级误删除案例及防范建议

故障诊断:DRM导致Oracle RAC节点Hang住

故障分析:数据库一致性关闭缓慢问题诊断

深入内核:监听器的工作原理与故障诊断分析

资源下载

关注公众号:数据和云(OraNews)回复关键字获取

‘2017DTC’,2017DTC大会PPT

‘DBALIFE’,“DBA的一天”海报

‘DBA04’,DBA手记4经典篇章电子书

‘RACV1’, RAC系列课程视频及ppt

‘122ARCH’,Oracle 12.2体系结构图

‘2017OOW’,Oracle OpenWorld资料

‘PRELECTION’,大讲堂讲师课程资料

点击上方蓝色文字关注↑↑↑↑↑

sys用户在cmd下以DBA身份登陆:

 

所谓操作系统,是应用程序与服务器硬件进行沟通的中间层。应用程序的所有操作,都是和操作系统进行沟通交互。操作系统负责将所有交互转化为设备语言,进行硬件交互。

   sqlplus /nolog   
   
--运行sqlplus命令,进入sqlplus环境。其中/nolog是不登陆到数据库服务器的意思,如果没有/nolog参数,sqlplus会提示你输入用户名和密码

一。 db file parallel write等待事件

我们在进行Oracle故障调试和内核原理工作的时候,经常需要了解后台运行的动作和细节。一些故障场景,如ORACLE后台进展慢、程序无法启动、无法登陆、相同环境执行结果却大不相同等问题,就需要操作系统级别监控,检查定位问题。

SQL〉connect / as sysdba   

引自如下blog:

Oracle自身已经提供了很多这类型的工具,如oradebug、各种等待事件和跟踪方式。此外,各类型的操作系统提供出很多系统级别工具,帮助我们进行监控。

--以系统管理员(sysdba)身份连接数据库,如果需要对数据库进行管理操作,那么需要以这种方式登陆数据库,或者:

 

connect sys@service_name as sysdba
--其中service_name是你配置的客户tnsname服务名

 

我们先来看一个简单的示例:

SQL> startup         --如果数据库没有启动的话,经过上述步骤连接后,正常启动数据

db文件并行写

LGWR进程写 online redo log是否用到缓存?澳门金莎娱乐手机版 1

这里介绍下几种连接用到的命令形式
  
  1.sqlplus / as sysdba 这是典型的操作系统认证,不需要listener进程
  
  2.sqlplus sys/oracle 这种连接方式只能连接本机数据库,同样不需要listener进程
  
  3.sqlplus sys/oracle@orcl 这种方式需要listener进程处于可用状态。最普遍的通过网络连接。
  
  以上连接方式使用sys用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,普通用户因为是数据库认证,所以数据库必需处于open状态。

   db文件并行写等待事件属于Oracle数据库写入程序(DBWR)进程,因为它是将块从SGA写入数据文件的唯一进程。当是写入时,DBWR进程编译一组脏块,将批处理交给操作系统,并等待db文件并行写事件以完成I / O。
虽然用户会话从来没有遇到db文件并行写等待事件,但这并不意味着它们从不会受到影响。如果写完成等待或空闲缓冲区等待事件显示在用户会话中,则它们可能受到db文件并行写事件的影响。

这里的这个缓存不是指数据库缓存,操作系统的文件缓存,如果对这个问题不明白,我们先看另外一个问题,我们如果怀疑存储有问题,经常会使用DD命令对磁盘进行测试,相关命令如下所示,那这个命令对磁盘的操作是直接写磁盘还是把数据写到文件缓存里去?

 

如果用户会话需要修改恰好在DBWR写批处理中的块,则它必须等待写完成等待事件,直到该批块完全写入磁盘。如果批量大,或I / O子系统速度慢,则DBWR进程将需要等待I / O完成的额外时间,因此将需要正在写入块的用户会话。

澳门金莎娱乐手机版 2

平时排错可能会用到的
  
  1.lsnrctl status查看服务器端listener进程的状态
     2.tnsping 查看客户端sqlnet.ora和tnsname.ora文件的配置正确与否,及对应的服务器的listener进程的状态。
        3.SQL>show sga 查看instance是否已经启动

如果用户会话正在经历空闲缓冲器等待事件,并且等待数量稳定增加,这意味着SGA中空闲块不足。如果缓冲区缓存太小,或者DBWR无法跟上块脏的速率,就会发生这种情况。 DBWR进程无法跟上脏块的原因之一是它花费了太多时间在db文件并行写事件上。

我们来实地进行测试验证看一下,这是在我电脑虚拟机上的一个测试结果,DD了2G的文件,花了4.99秒的时间,实际上这个命令结束的时候数据没真正写到磁盘上去,对于磁盘的写到缓存就返回了。我们另外看一条命令

 

参数:

澳门金莎娱乐手机版 3

如果在sql*plus环境中使用shutdown命令关闭了数据库,现在要启动数据库的话,必须先用不登陆到数据库服务器的方式进入sqlplus环境,再用startup命令启动数据库。因为数据库没有启动的话,不能登陆数据库,也无法验证用户名和密码。

       P1 = Oracle正在写入的文件数。

这里加了一个标志,就是ofag=sync,加完这个标示之后,我们发现写磁盘的速度下降了,写2G的文件花了8秒,多用了60%的时间。这就是文件系统缓存的作用,文件系统缓存大大增加了主机的性能。

 

       P2 =要写入的块数。

我们现在回到之前那个问题,LGWR进程写redo log 会不会用到缓存呢?我们使用strace –p命令来跟踪LGWR进程,为方便观察我们添加一组新的redo日志组并进行切换。

sqlplus命令格式如下:

       P3 =与P2相同的I / O请求总数,因为不使用多块I / O。
由于P1和P2报告的是文件和块的数量,而不是绝对文件和块的数量,因此DBA无法确定正在写入哪些对象。但是,等待写入完成等待或空闲缓冲区等待事件的用户会话指示其P1和P2值中的绝对文件和块编号。

澳门金莎娱乐手机版 4

用法: SQLPLUS [ [<option>] [<logon>] [<start>] ]
其中 <option> ::= -H | -V | [ [-M <o>] [-R <n>] [-S] ]
      <登录>  ::= <用户名>[/<口令>][@<connect_string>] | / | /NOLOG
      <启动>  : : = @<文件名>[.<ext>] [<参数> ...]
 "-H" 显示 SQL*Plus 的版本标帜和使用语法
 "-V" 显示 SQL*Plus 的版本标帜
 "-M <o>" 使用 HTML 标志选项 <o>
 "-R <n>" uses restricted mode <n>
 "-S" uses silent mode

常见原因和措施

通过分析TRACE信息我们发现,LGWR进程对online redo log打开使用了o_sync标示,该标示表示直接写入存储设备。

 

  db文件并行写延迟通常是慢I / O子系统或较差I / O配置的症状。这包括数据库文件布局不当,I / O控制器比率不正确,条带大小和/或RAID级别错误,以及磁盘不足(即有几个高容量磁盘与多个低容量磁盘)。 DBA需要查看平均I / O时间。良好的数据库和I / O子系统应提供不超过2厘秒的平均I / O等待时间。

TRUSS/TUSC/STRACE是什么?澳门金莎娱乐手机版 5

 

  如果这是一个问题,DBA应通过映射从装载点到控制器和控制器到物理磁盘组的I / O路由,并确保数据库文件的正确放置来检查I / O配置。此功能的命令是平台。具体和不幸的是,通常需要管理员权限。对于在Sun平台上使用Veritas Volume Manager配置的存储系统,DBA可能能够使用vxprint -ht命令。 DBA还应该使用sar -d,iostat -dxn或等效工具从操作系统级别监视使用情况(即I / O吞吐量和瓶颈)。如果一些磁盘长时间(即几乎100%忙)被命中,并且平均队列长度大于3,则DBA需要重新安排一些数据库文件。

下面我引用一下TRUSS的官方解释,TUSC与STRACE工具功能基本一样。

1,sqlplus  '/ as sysdba '

2,sqlplus /nolog
SQL> connect / as sysdba

  除了确保I / O子系统配置正确并且数据库文件已正确放置之外,DBA还应使DBWR进程(如果平台)提供非阻塞I / O(DISK_ASYNC_IO = TRUE)。支持异步I / O。

澳门金莎娱乐手机版 6

 

较大的写批处理增加了DBWR I / O等待时间,特别是在数据文件放置不当的环境中。一个确定的标志,写批处理太大是当用户会话开始等待写完成等待事件。在Oracle 8i之前,_DB_BLOCK_WRITE_BATCH参数确定了DBWR写批量大小,并且值可以在X $ KVII中看到。它被列为DB写入程序IO丛集。在8i及更高版本中,此参数由_DB_WRITER_CHUNK_WRITES替换,并列为DBWR写入块。引入了一个新参数_DB_WRITER_MAX_WRITES以限制未完成的DBWR I / O数量。 DBA应确保批量大小不会大到导致写入完全等待和更长的db文件并行写入,并且也不会小到导致长脏队列和空闲缓冲区等待。另外,请记住,自8i以来,Oracle所做的改进应该使写批处理问题休息,DBA不应该混乱。写完成等待事件在8i之前的版本中是普遍的。

它是一个在系统层处理复杂问题非常有用的工具,用来跟踪一个进程的系统调用或者信号产生的情况。适用于不同的系统环境。

1和2是一样的意思。

 

它们适用于不同的Unix环境:

 

之前的Oracle 8i

•      Truss : AIX,Solaris

 

SQL> select * from x $ kvii其中kviitag ='kcbswc';

•      Tusc  :HP-Unix(需单独安装)

SQLPlus 在连接时通常有三种方式

Oracle 8i及更高版本

•      Strace:Linux

  1. sqlplus / as sysdba
        操作系统认证,不需要数据库服务器启动listener,也不需要数据库服务器处于可用状态。比如我们想要启动数据库就可以用这种方式进入
        sqlplus,然后通过startup命令来启动。

SQL> select *澳门金莎娱乐手机版 , from x $ kvii其中kviitag在('kcbswc','kcbscw');

Truss常用参数介绍

 

       当DB_BLOCK_MAX_DIRTY_TARGET参数设置得太低时,它也可能导致对db文件的过度等待并行写入和写入完全等待事件。此参数用于影响执行所需的时间量。实例恢复。当脏缓冲区的数量超过参数的值时,DBWR将把脏缓冲区写入磁盘。这称为增量检查点。较小的值提供较短的实例恢复时间,但是它可能导致DBWR进程变得多活动,特别是在正在修改大量缓冲区的活动数据库中。这反过来可能导致过多的写完成等待和更长的db文件并行写时间。此参数在9i中被隐藏,DBA不应该关心它。
   
诊断

参数 介绍
-a
显示在每一执行系统调用中传递的参数字符串。
-c 计数跟踪系统调用、故障和信号而不是逐行显示跟踪结果。跟踪命令终止或 truss 中断时生成摘要报告。若还使用 -f 标志,计数包含所有跟踪的系统调用、故障和子进程信号。
-d 每行输出包含时间戳记。时间从跟踪开始以每秒显示。跟踪输出的第一行显示测量单个时间戳记的基本时间。缺省不显示时间戳记。
-D 每行输出显示增量时间。增量时间表示从由该线程引起的最后报告事件起计时引起事件的 LWP 的逝去时间。缺省不显示增量时间。
-e 显示在每一执行系统调用中传递的环境字符串。
-f 跟在 fork 系统调用产生的所有子进程之后,并包含跟踪输出中的信号、故障和系统调用。 通常,仅跟踪第一级命令和进程。如果指定 -f 标志,进程标识与每行跟踪输出一起显示哪个进程执行系统调用或接收信号。
-l 显示有关 LWP 进程的标识(线程标识)及 truss 输出。输出中缺省不显示 LWP 标识。
-o 指定用于跟踪输出的文件。缺省时输出指向标准错误。
-p 将参数作为一列现存进程的进程标识而不是要执行的命令解释到 truss。 倘若进程用户标识或组标识与用户的用户标识或组标识匹配或者用户是特权用户,truss 控制并开始跟踪每个进程。

    sqlplus / as sysdba 是操作系统用户验证登录方式,通过OS本地的IPC可以直接连接到实例,IPC由本地OS提供,允许各种进程在主机内进行通信。所以不需要listener也可以连接到实例。

       对于系统级诊断,请查询V $ SYSTEM_EVENT视图以确定AVERAGE_WAIT是否是问题。

Tusc常用参数介绍

  1. sqlplus username/password
        连接本机数据库,不需要数据库服务器的listener进程,但是由于需要用户名密码的认证,因此需要数据库服务器处于可用状态才行。

       SQL> select * from v $ system_event where event ='db file parallel write';

澳门金莎娱乐手机版 7

 

当在V$SYSTEM_EVENT时,还要查找伴随事件。

Strace常用参数介绍

  1. sqlplus usernaem/password@orcl
        通过网络连接,这是需要数据库服务器的listener处于监听状态。此时建立一个连接的大致步骤如下 
      a. 查询sqlnet.ora,看看名称的解析方式,默认是TNSNAME  
      b. 查询tnsnames.ora文件,从里边找orcl的记录,并且找到数据库服务器的主机名或者IP,端口和service_name  
      c. 如果服务器listener进程没有问题的话,建立与listener进程的连接。  
      d. 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端
                就连接上了数据库的server process。
      e. 这时连接已经建立,可以操作数据库了。

       SQL> select * from v $ system_event

参数 介绍
-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程. 
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-q 禁止输出关于脱离的消息.
-r 打印出相对时间关于,,每一个系统调用.
-t 在输出中的每一行前加上时间信息.
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 微秒级输出,以秒了表示时间.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.

参考来源:

       SQL> where event in('write complete waits','free buffer waits');

下面我们看两个简单的使用示例:

 

       此事件发生在DBWR中。它表示DBWR正在对文件和块执行并行写入。当最后一个I / O转到磁盘时,等待结束.Wait时间:

首先是使用strace –tt date来跟踪date命令,使用-tt参数在每一行的行头上加上时间信息,到微秒级别。

 

Wait until all of the I/Os are completed.

澳门金莎娱乐手机版 8

 

Parameter      Description
 
requests       This indicates the total number of I/O requests, which will be the same as blocks.

另外一个示例就是使用strace –d cate命令统计所有函数调用的次数及总时间占用,这个对于命令跟踪的分析统计非常有用

如果你希望使用操作系统的认证方式登陆到数据库,数据库自然会要求操作系统进行认证,如果是本地用户,在本机就可以完成认证工作,如果是域用户, oracle**必须**连接到domain controller进行认证, 如果此时网络出现故障,oracle会提示你权限不够(insufficient privileges)
我曾经告诉过你
dba使用的是sys用户登陆到数据库进行建立数据库的操作的
你可以测试一下, 在你登陆到域和不登陆到域的情况(甚至是你断开网线和连接网线的情况下)
conn sys/你的sys的密码 as sysdba 
是否可以登陆到系统。
这对于你研究dbca 的行为会有所帮助。

interrupt
 
timeout        This indicates the timeout value in centiseconds to wait for the IO completion.

澳门金莎娱乐手机版 9

 

 

一个SQLPLUS连接慢的问题澳门金莎娱乐手机版 10

二.  log file parallel write 等待事件

接下来我们来看一个案例,这个案例是一个SQLPLUS连接慢的问题,AIX 7.1的操作系统,11.2.0.3 两节点RAC数据库,检查硬件的安装环境没有问题,重新配置环境变量也不能解决问题。

引自如下blog:

对于这种问题,我们首先要进行一些排查,排除一些可能性:

1、  我们看一下使用sqlplus/ as sysdba慢不慢,经过反馈,sqlplus / as sysdba也慢,连接时间要5秒左右。

日志文件并行写

2、  远程连接慢不慢?

       日志文件并行写等待事件有三个参数:文件,块和请求。在Oracle数据库10g中,此等待事件属于系统I / O等待类。在处理日志文件并行写等待事件时,记住以下关键思想。

  1. 本地使用远程连接慢不慢  sqplus username/passwdd@tns 澄清: 测试也慢,慢约5秒钟左右。

  2. 其它主机使用远程慢不慢?澄清:同样也慢, 慢约5秒钟左右。

       (1)日志文件并行写事件仅属于LGWR进程。

以上判断表明这个连接慢并非一定和Listener有关,同时也可以排除网络问题引起的监听连接慢,所以先需要解决sqlplus / as sysdba 慢的问题,很大可能在ORACLE数据库的连接处理机制上面。

       (2)缓慢的LGWR可以影响前台进程提交时间。

我们使用TRUSS命令去跟踪跟踪sqlplus / as sysdba连接命令,发现不断出现sigpromask、_sigaction及thread_setmystate函数调用。

       (3)重要的日志文件并行写等待时间很有可能是I / O问题。

那这些函数代表什么?

常见原因,诊断和操作

澳门金莎娱乐手机版 11

       由于db文件并行写等待事件仅属于DBWR进程,因此日志文件并行写等待事件仅属于LGWR进程。当到了写入时,LGWR进程通过向操作系统发出一系列系统写入调用将重做缓冲区写入联机重做日志。 LGWR进程等待日志文件并行写事件的写入完成。 LGWR进程在满足_LOG_IO_SIZE阈值时,在日志缓冲区中有1MB的重做条目,以及由DBWR进程发布时,在提交时,回滚时,每三秒钟寻找重做块一次写入一次。

之后对这些函数进行分析,其主要功能如下:

       虽然用户会话从来不经历日志文件并行写等待事件,但它们可能受到缓慢的LGWR进程的影响。缓慢的LGWR进程可以放大日志文件同步等待,用户会话在提交或回滚期间等待。在LGWR完成写入之前,用户会话将不会获得提交或回滚完成确认。第7章有关于日志文件同步等待事件的更多细节。

We see in that truss that main reason weare waiting is that the forked thread is looping on some signal handlingmodification :

       要查看的关键数据库统计信息是日志文件并行写入和日志文件同步等待事件的系统级TIME_WAITED和AVERAGE_WAIT,因为它们是相互关联的:

 They impact the way memory isconfigured (read/write protected, guard pages...)

SQL> select event,time_waited,average_wait from v $ system_event where('log file parallel write','log file sync');

通过上述分析发现,连接的时候慢与内存页的分配有关,通过进一步检查内存参数发现,pre_page_sga设置为true。接下来通过测试可以重现这个问题,实际验证的确如此:设置为true,问题重现,设置为false,问题消失,并且发现这个参数为True的情况下,SGA内存越大连接变慢的越明显。

EVENT TIME_WAITED AVERAGE_WAIT

这种行为正常吗?


通过查询MOS文档Notes 289585.1,我们了解知这个行为是正常。

log file parallel write   11315158   .508570816
log file sync          7518513   .497255756

澳门金莎娱乐手机版 12

  如果日志文件并行写入平均等待时间大于10ms(或1cs),这通常表示缓慢的I / O吞吐量。修复与db文件并行写入等待相同。如果重做日志位于裸设备上,并且操作系统支持异步I / O,则启用异步写入。对于文件系统上的重做日志,请使用同步直接写入。
  不幸的是,你不能产生多个LGWR进程。在这种情况下,关键是没有别的东西共享重做日志文件的安装点。确保为安装点提供服务的控制器不会过载。将重做日志移动到更高速的磁盘也将有所帮助。
  我们强烈建议您避免将重做日志放在RAID5磁盘上,但我们也了解,很多时候,您没有选择或说话。您可以在www.baarf.com发泄您的沮丧。
  除了提高I / O吞吐量,还可以减少重做条目的数量。这将提供一些救济,但不是治愈。只要可能,请使用NOLOGGING选项。应使用NOLOGGING选项创建或重建索引。 CTAS操作也应使用此选项。

关注本公众号,回复:prelection,你可以找到本文的相关视频文档。

注意:

澳门金莎娱乐手机版 13

       NOLOGGING选项不适用于正常的DML操作,例如插入,更新和删除。使用NOLOGGING选项创建的对象不可恢复,除非在损坏之前执行备份。如果必须进行额外备份,则通过不记录而保存的I / O将用于备份。 FORCE LOGGING模式下的数据库将记录所有更改(临时表空间中的更改除外),而不管表空间和对象设置如何。

相关阅读:

以较高的回滚段使用率为代价的较低提交频率也可以提供一些缓解。

DBA生存警示:系统存储级误删除案例及防范建议

       高提交频率导致LGWR进程过度活动,并且当与慢I / O吞吐量耦合时将仅放大日志文件并行写等待。

故障诊断:DRM导致Oracle RAC节点Hang住

       应用程序可能在循环中处理大量数据并提交每个更改,这会导致日志缓冲区被过度刷新。在这种情况下,将应用程序修改为以较低的频率提交。也可能有很多短会话登录到数据库,执行。快速DML操作和注销。

故障分析:数据库一致性关闭缓慢问题诊断

       在这种情况下,可能需要审查应用程序设计。您可以使用以下查询查明谁正在提交频繁:

深入内核:监听器的工作原理与故障诊断分析

       SQL> select sid,value from v $ sesstat where statistic#=(select statistic#from v $ statname where name ='user commits')order by value desc;

资源下载

- Another evidence of excessive commits is high redo wastage.

关注公众号:数据和云(OraNews)回复关键字获取

SQL> select b.name, a.value, round(sysdate - c.startup_time) days_old from   v$sysstat a, v$statname b, v$instance c where a.statistic# = b.statistic# and    b.name  in ('redo wastage','redo size');

‘2017DTC’,2017DTC大会PPT

NAME VALUE DAYS_OLD

‘DBALIFE’,“DBA的一天”海报


‘DBA04’,DBA手记4经典篇章电子书

redo size        249289419360       5
redo wastage     2332945528         5

‘RACV1’, RAC系列课程视频及ppt

 
       检查作业调度程序,查看热备份是否在高峰时间运行。他们可以创建大量的重做条目,这反过来增加日志文件并行写等待。热备份应在非高峰时间运行,并且表空间应尽快从热备份模式中移除。

‘122ARCH’,Oracle 12.2体系结构图

   最后,小心不要一次堵塞LGWR有太多的重做条目。这可能发生在大日志缓冲区,因为三分之一阈值也较大,并保存更多的重做条目。当满足三分之一阈值时,如果LGWR进程尚未激活,则执行后台写入。并且重做条目的数量可能太多,LGWR一次处理,导致扩展的日志文件并行写入等待。所以想法是流LGWR写。这可以通过降低由初始化参数_LOG_IO_SIZE控制的三分之一阈值来实现。

‘2017OOW’,Oracle OpenWorld资料

   默认情况下,_LOG_IO_SIZE是LOG_BUFFER的1/3或1MB(以较小者为准),以日志块表示。查询X $ KCCLE.LEBSZ的日志块大小。通常,它是512字节。

‘PRELECTION’,大讲堂讲师课程资料

   例如,如果LOG_BUFFER为2,097,152字节(2MB),日志块大小为512字节,则_LOG_IO_SIZE的默认值为1,365个使用的日志块。在这个大小,LGWR进程变得懒惰,通常只写在事务终止(同步写)或从3秒超时唤醒。您应该将_LOG_IO_SIZE设置为相当于64K。这样,你仍然可以有一个更大的日志缓冲区,以适应检查点后的缓冲区空间的尖峰,但是当缓冲区中有64K个重做条目时,写入将开始,假设没有用户提交或回滚,LGWR睡眠在此期间没有超时。

澳门金莎娱乐手机版 14

 

笔记:

   这种方法不是没有开销。 LGWR写操作需要重做复制和重做写锁存器。因此,更有效的LGWR过程将增加这些锁存器上的负载。如果这些锁存器当前具有高SLEEPS,则不要减小_LOG_IO_SIZE。但是,如果条件允许您更改_LOG_IO_SIZE,则必须通过查询V $ LATCH视图来监视其随时间的影响。确保在实施更改之前获得基线。

   您可以使用以下查询来查找每个写入的重做日志块的平均数量和平均LGWR I / O大小(以字节为单位):

SQL> select v(a.value / b.value)+ 0.5,0)as avg_redo_blks_per_write,round((a.value / b.value)+ 0.5,0)* c.lebsz as avg_io_size from v $ sysstat a, v $ sysstat b,x $ kccle c where c.lenum = 1 and a.name ='redo blocks written'和b.name ='redo writes';

AVG_REDO_BLKS_PER_WRITE AVG_IO_SIZE


                      8 8192                                   

本文由澳门金莎娱乐网站发布于澳门金莎娱乐手机版,转载请注明出处:sqlplus连接的三种方式,故障诊断

关键词:

SOCK5代理服务器配置

                                                                                  SOCK5代理服务器配置 r...

详细>>

tp5快速入门,入门第一课

ThinkPHP5的安装使用/tp5快速入门,thinkphp5tp5 点击进入视频教程 一 安装 一、安装 1、简介 TP5是一个快捷,简单的基于...

详细>>

04搭建嵌入式开发环境,Window之间文件传输

Linux,Window之间文件传输-NFS,Samba,SSH,-nfssamba NFS     NFS(Network FileSystem)即网络文件系统,它允许网络中的计...

详细>>

如何使用Linux下的系统日志,linux日志分析

加强安全(二)Linux可疑日志分析整理,linux日志分析 Hello,大家好,我是Lionel,距离2018还不到10天了,回忆起2017公司...

详细>>