Oracle Database 11gR2性能调整与优化

终于,在2013年的最后一天拿到了清华出版社寄来的这本耗费了我们三人一年多时间的新书–《Oracle Database 11gR2性能调整与优化》!IMG_20131231_124510

第一次抚着印着自己名字的新书,心情还是十分激动滴!过去500多天的日日夜夜,基本上所有的课余时间都花费在上面了。从初稿开始,审阅,翻译团队内部讨论,出版社初审,复审,终审,每个章节都凝结了无数个不眠之夜。

读懂一本英文原著不难,把它译出来并让人看的懂,看的明白就不是那么简单一回事了。通过翻译这本书,我更加深深的体会到了这一点。况且这还是一本技术专著,在翻译的过程中,本身我也是读者,也对很多内容是一些再学习的过程。所以书中难免有一些错漏,也欢迎大家通过这个反馈页面反馈给我们,谢谢!

在翻译的过程中,我得到了老板Steven的无数帮助和支持,很多技术的细节和文字都是他帮忙润色(其实他本人也是译者之一)。翻译团队的另外一位Steven也是一位技术专家,他来自Oracle Real World Performance团队。感谢两位团队成员的支持和帮助!清华出版社的王军编辑在本书的出版过程中也付出了辛勤的汗水和努力,我们的合作很愉快,谢谢!

本书的原作者Rich也是一位非常nice的人,虽然是世界级的大师,但是人完全没有架子。在上海OOW期间,与他的三天近距离接触更让我感受到了大师的风范。

许多朋友也在翻译过程中提供了他们的专业的并富有建设性的意见:我的大学同学高洪霞,同事小荷和Jarod,伟林,南哥,菲哥等等,恕我不能一一罗列他们的姓名……

这一年多的时间里,还有在背后默默支持我的家庭。我的任劳任怨的妻子,七岁的儿子,还有我慈爱的父母,感谢你们!!没有你们的理解和支持,就不会有这本书的出版。

 

Exadata 备份恢复最佳实践

Exadata的备份恢复跟普通单机或者RAC数据库的备份恢复基本面是一样的,但是针对多节点还是有一些优化的最佳实践。今天就简单谈谈针对Exadata的备份和恢复。

为充分利用Exadata的I/O能力和多节点的优势,建议先在每个DB节点上分配2个通道进行测试。另外,为了让所有的DB节点都能参与到备份任务中,可以在每个节点建立一个failover类型的service。下面是一个实际的测试配置和脚本,仅供参考。

srvctl add service –d df –s bkup1 –r df1 –a df2 ,df3 ,df4
srvctl add service –d df –s bkup2 –r df2 –a df1 ,df3 ,df4
srvctl add service –d df –s bkup3 –r df3 –a df1 ,df2 ,df4
srvctl add service –d df –s bkup4 –r df4 –a df1 ,df2 ,df3

srvctl start service -d df

export ORACLE_HOME
export NLS_DATE_FORMAT=”YYYY/MM/DD HH24:MI:SS”
begin_time_sec=`date +%s`

set echo on
run
{
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE DEVICE TYPE DISK PARALLELISM 8;

allocate channel ch01 device type disk connect ‘sys/welcome1@x3-scan/bkup1′;
allocate channel ch02 device type disk connect ‘sys/welcome1@x3-scan/bkup2′;
allocate channel ch03 device type disk connect ‘sys/welcome1@x3-scan/bkup3′;
allocate channel ch04 device type disk connect ‘sys/welcome1@x3-scan/bkup4′;
allocate channel ch05 device type disk connect ‘sys/welcome1@x3-scan/bkup1′;
allocate channel ch06 device type disk connect ‘sys/welcome1@x3-scan/bkup2′;
allocate channel ch07 device type disk connect ‘sys/welcome1@x3-scan/bkup3′;
allocate channel ch08 device type disk connect ‘sys/welcome1@x3-scan/bkup4′;
backup
as backupset
incremental level 0
section size 128g
database;
}
end_time_sec=`date +%s`

total_execution_time_sec=`expr ${end_time_sec} – ${begin_time_sec}`

echo “Script execution time is $total_execution_time_secseconds”

下图是一个官方数据的截图,原文可以参考白皮书

exadatabackup

从上图可以看到,在11203的版本下,满配的X2-2(X3-2),磁盘的备份速度可以达到每小时20-25TB。在11202版本下,可以达到每小时17-18TB。

针对恢复,同理,下面是一段参考脚本:
此示例是在1/8配置的环境下进行的测试,使用了16个channel,针对每个node建了一个service。注意此处是针对表空间而非全库的恢复,稍加修改可以进行全库的恢复。

run
{

allocate channel ch01 device type disk connect ‘sys/oracle@bg1′;
allocate channel ch02 device type disk connect ‘sys/oracle@bg1′;
allocate channel ch03 device type disk connect ‘sys/oracle@bg1′;
allocate channel ch04 device type disk connect ‘sys/oracle@bg1′;
allocate channel ch05 device type disk connect ‘sys/oracle@bg2′;
allocate channel ch06 device type disk connect ‘sys/oracle@bg2′;
allocate channel ch07 device type disk connect ‘sys/oracle@bg2′;
allocate channel ch08 device type disk connect ‘sys/oracle@bg2′;
allocate channel ch09 device type disk connect ‘sys/oracle@bg1′;
allocate channel ch010 device type disk connect ‘sys/oracle@bg1′;
allocate channel ch011 device type disk connect ‘sys/oracle@bg1′;
allocate channel ch012 device type disk connect ‘sys/oracle@bg1′;
allocate channel ch013 device type disk connect ‘sys/oracle@bg2′;
allocate channel ch014 device type disk connect ‘sys/oracle@bg2′;
allocate channel ch015 device type disk connect ‘sys/oracle@bg2′;
allocate channel ch016 device type disk connect ‘sys/oracle@bg2′;

sql ‘ALTER TABLESPACE eighth OFFLINE IMMEDIATE’;
restore tablespace eighth;
recover tablespace eighth;
sql ‘ALTER TABLESPACE eighth ONLINE’;

}

Cache Fusion 剖析(一)

本系列文章翻译自网站:DataDisk.co.uk (原文链接

Cache Fusion 是RAC的核心,本系列文章意在帮助大家理解RAC的内部和运作机理,有些名词和概念在新版本的RAC中改变了名称或者很少提及,但是本质保持不变。
译文开始

我之前在GRD那一节提到过Cache Fusion, 这里我会介绍更多实现的细节。我也会给出一些我自己的RAC系统上的具体例子。

Cache Fusion尽可能使用最有效的通信方法以降低私有网络上的通信流量,现在管理RAC环境您已经不需要关心这么底层的细节了,当然了解这些有助于理解RAC的工作原理和调试问题。RAC看起来只有一个大的buffer但事实并非如此,每个节点上的buffer cache依然保持独立,数据块通过分布式锁和消息操作实现共享。RAC通过私有网络把数据块复制到别的实例,因为这比从磁盘读取要有效的多,没错,内存和网络协同工作比磁盘I/O更快。

数据块从一个实例的buffer cache传输到另外一个实例的buffer cache被称之为ping。正如较早前提到的那样,当一个实例需要一个数据块,它会发送请求到锁的master实例要求以希望的锁方式访问此块,这个过程叫做BAST。当实例收到BAST消息之后,它就会尽快的把持有的锁降级,但此时实例或许要将对应的数据块写回磁盘,这个操作叫做Disk ping或者hard ping。在最近的RAC版本中,Disk Ping已经被大大降低,然后总还是有少量的Disk Ping发生,因而更加依赖于实例间的数据块传输。在最新版本的RAC中,当实例收到BAST后,发出数据块或者把锁降级可能被延迟几十毫秒,这点额外的时间使得持有锁的实例可以完成当前活动的事务并妥善标记数据块的头。这样接受的实例就不用在接受/读取数据块之后立刻去检查事务的状态。检查事务状态是一个耗时的操作,因为可能需要访问(或者ping)相应的回滚段头和回滚段数据块。参数_gc_defer_time用来定义实例延迟降级锁的时长。

在GRD那一节我提到了PI(过去映像),简单来说他们就是存在于实例本地buffer cache中的数据块的副本。当一个实例需要发送一个刚刚修改过的数据块给别的实例时,它就会保留那个数据块的一个副本,标记为PI。PI一直被保留直到那个数据块被当前的所有者写回磁盘。当一个数据块被写回磁盘且此数据块有一个全局角色,也就是说此数据块有PI存在于其他实例的buffer cache。GCS就会通知持有这些PI的实例丢弃这些PI。当需要做检查点时,就会通知GCS要做写的动作,GCS负责找到最新的数据块映像并通知持有这些映像的实例执行数据块写操作。GCS然后通知所有全局资源的持有者他们可以释放包含PI副本数据块的缓存,从而允许释放全局资源。可以通过表X$BH查看过去映像的数据块。

select state, count(state) from X$BH group by state;

Note: the state column with 8 is the past images.

< 未完待续>

Oracle Database 11.2.0.4 GA

继Oracle Database 12cR1 之后的又一个大的版本 Oracle Database 11.2.0.4.0 也就是11gR2的最后一个Patchset近日GA了。
其中当然包括了很多12cR1中的一些新特性,比如:

  • Backport of Oracle Data Redaction
  • Trace File Analyzer and Collector
  • RACcheck – The Oracle RAC Configuration Audit Tool
  • Database Replay Support for Database

等。详细的新特性可以去Note查看,另外这个Patchset的补丁号码是:
Patch 13390677: 11.2.0.4.0 PATCH SET FOR ORACLE DATABASE SERVER

文档页面也已经更新到了最新的版本。

详细的下载页面如下:
11204

目前可用的平台包括Linux64和Linux32,其他平台也会相继推出。

AIX PVID能不能用作ASM磁盘

好几次遇到这个问题,这次又遇到,就在这里总结一下,供大家参考。

在AIX系统中,给磁盘分配PVID以后,如果这些磁盘被用作Oracle ASM Diskgroup,那么当系统重启后可能导致ASM磁盘被破坏,数据丢失。导致这个问题的原因很简单:

When the PVID is set to a disk in a volume group, the PVID is stored in two locations. In Physical disk header ( within first 4K )and in AIX’s system object database, called ODM ( Object Data Manager ).

When the diskgroup is created, the disk header information of PVID is overwritten. However, with reboot the OS, from ODM, AIX might try to restore the PVID information onto the disk header,
there by destroying the ASM metadata.

解释过来就是:
磁盘组被创建的时候,磁盘中的PVID信息会被Oracle ASM作为磁盘头,也就是metadata重写掉。这对于Oracle ASM来说,是一贯的动作,对于所有加入磁盘组的磁盘都是同等对待的。问题出在重启以后,AIX的ODM会试图去检测并恢复磁盘头上的PVID信息。这样就导致磁盘头上重要的ASM metadata信息丢失,ASM中的数据丢失。

问题的解决方法在Oracle Notes750016.1中有详细描述。
Corrective Action for ASM Diskgroup with Disks Having PVIDs on AIX (Doc ID 750016.1)

If the ASM disk header Metadata has not been over written by PVID from ODM ( before a reboot ), then you can follow the following steps to update the ODM not to have PVID for the disks:

1] Do not reboot any node.

1.1] Drop one disk at a time from the diskgroup.

1.2] Clear the PVID of the dropped disk

# chdev -l hdisk5 -a pv=clear

Run this on ALL the nodes in case of RAC.

1.3] Check the disk does not have the PVID from ALL the nodes

# lspv

1.4] Add the disk back to the diskgroup

1.5] Do this for all the disks having PVID in the diskgroup, one by one. Take care that the rebalance is complete from the drop/add disk command before going for the next disk.

OR

2] This needs downtime:

2.1] Take ‘dd’ backup of the disk headers

# dd if=/dev/hdisk5 of=/tmp/d5.txt bs=1024 count=1024

2.2] Shutdown ASM instance ( on ALL the nodes in RAC setup ).

2.3] Clear the PVID

# chdev -l hdisk5 -a pv=clear

Run this on ALL the nodes in case of RAC.

2.4] Check the disk does not have the PVID from ALL the nodes

# lspv

2.5] Start the ASM Instance(s) and mount the diskgroup on ALL the nodes

WARNING:
Point-2 commands overrides the content of the disk header and so could be destructive if not correctly used. If you have any doubt, raise an SR with Oracle Support before any action.

Oracle RDBMS Database patchset summary

Oracle 12c昨天终于GA了,随着今年10.2,明年11.1的支持周期告一段落,我们也将经迎来一个升级的高发期,方便找到合适的版本,转贴一个MOS note,全面介绍了Oracle RDBMS Database Patchset number:

 

<code>
Patchset/PSU	Patch Number	 	Description

11.2.0.3.6	16056266	 	DATABASE PATCH SET UPDATE 11.2.0.3.6 (INCLUDES CPUAPR2013) 
11.2.0.3.5	14727310	 	DATABASE PATCH SET UPDATE 11.2.0.3.5 (INCLUDES CPUJAN2013):
11.2.0.3.4	14275605	 	DATABASE PATCH SET UPDATE 11.2.0.3.4 (INCLUDES CPUOCT2012)
11.2.0.3.3	13923374	 	DATABASE PATCH SET UPDATE 11.2.0.3.3 (INCLUDES CPU JUL2012):
11.2.0.3.2	13696216	 	DATABASE PATCH SET UPDATE 11.2.0.3.2 (INCLUDES CPU APR2012)
11.2.0.3.1	13343438	 	DATABASE PATCH SET UPDATE 11.2.0.3.1 (INCLUDES CPU JAN2012)
11.2.0.3	10404530	 	11.2.0.3.0 PATCH SET FOR ORACLE DATABASE SERVER
 	 	 	 
11.2.0.2.10	16056267	 	DATABASE PATCH SET UPDATE 11.2.0.2.10 (INCLUDES CPUAPR2013) 
11.2.0.2.9	14727315	 	DATABASE PATCH SET UPDATE 11.2.0.2.9 (INCLUDES CPUJAN2013):
11.2.0.2.8	14275621	 	DATABASE PATCH SET UPDATE 11.2.0.2.8 (INCLUDES CPUOCT2012)
11.2.0.2.7	13923804	 	DATABASE PATCH SET UPDATE 11.2.0.2.7 (INCLUDES CPU JUL2012)
11.2.0.2.6	13696224	 	DATABASE PATCH SET UPDATE 11.2.0.2.6 (INCLUDES CPU APR2012)
11.2.0.2.5	13343424	 	DATABASE PATCH SET UPDATE 11.2.0.2.5 (INCLUDES CPU JAN2012)
11.2.0.2.4	12827726	 	DATABASE PSU 11.2.0.2.4 (INCLUDES CPUOCT2011)
11.2.0.2.3	12419331	 	DATABASE PSU 11.2.0.2.3 (INCLUDES CPUJUL2011)
11.2.0.2.2	11724916	 	DATABASE PSU 11.2.0.2.2 (INCLUDES CPUAPR2011)
11.2.0.2.1	10248523	 	DATABASE PSU 11.2.0.2.1
11.2.0.2	10098816	 	11.2.0.2.0 PATCH SET FOR ORACLE DATABASE SERVER
 	 	 	 
11.2.0.1.6	12419378	 	 DATABASE PSU 11.2.0.1.6 (INCLUDES CPUJUL2011)
11.2.0.1.5	11724930	 	DATABASE PSU 11.2.0.1.5 (INCLUDES CPUAPR2011)
11.2.0.1.4	10248516	 	DATABASE PSU 11.2.0.1.4 (INCLUDES CPUJAN2011)
11.2.0.1.3	9952216	 	DATABASE PSU 11.2.0.1.3 (INCLUDES CPUOCT2010)
11.2.0.1.2	9654983	 	DATABASE PSU 11.2.0.1.2 (INCLUDES CPUJUL2010)
11.2.0.1.1	9352237	 	DATABASE PSU 11.2.0.1.1
 	 	 	 
11.1.0.7.15	16056268  [*]	 	DATABASE PATCH SET UPDATE 11.1.0.7.15 (INCLUDES CPUAPR2013) 
11.1.0.7.14	14739378 [*]	 	DATABASE PATCH SET UPDATE 11.1.0.7.14 (INCLUDES CPUJAN2013)
11.1.0.7.13	14275623 [*]	 	DATABASE PATCH SET UPDATE 11.1.0.7.13 (INCLUDES CPUOCT2012)
11.1.0.7.12	13923474	 	DATABASE PATCH SET UPDATE 11.1.0.7.12 (INCLUDES CPU JUL2012)
11.1.0.7.11	13621679	 	DATABASE PATCH SET UPDATE 11.1.0.7.11 (INCLUDES CPU APR2012)
11.1.0.7.10	13343461	 	DATABASE PATCH SET UPDATE 11.1.0.7.10 (INCLUDES CPU JAN2012)
11.1.0.7.9	12827740	 	DATABASE PSU 11.1.0.7.9 (INCLUDES CPUOCT2011)
11.1.0.7.8	12419384	 	DATABASE PSU 11.1.0.7.8 (INCLUDES CPUJUL2011)
11.1.0.7.7	11724936	 	DATABASE PSU 11.1.0.7.7 (INCLUDES CPUAPR2011)
11.1.0.7.6	10248531	 	DATABASE PSU 11.1.0.7.6 (INCLUDES CPUJAN2011)
11.1.0.7.5	9952228	 	DATABASE PSU 11.1.0.7.5 (INCLUDES CPUOCT2010)
11.1.0.7.4	9654987	 	DATABASE PSU 11.1.0.7.4 (INCLUDES CPUJUL2010)
11.1.0.7.3	9352179	 	DATABASE PSU 11.1.0.7.3 (INCLUDES CPUAPR2010)
11.1.0.7.2	9209238	 	DATABASE PSU 11.1.0.7.2 (INCLUDES CPUJAN2010)
11.1.0.7.1	8833297	 	DATABASE PSU 11.1.0.7.1 (INCLUDES CPUOCT2009)
11.1.0.7	6890831	 	11.1.0.7.0 PATCH SET FOR ORACLE DATABASE SERVER
 	 	 	 
10.2.0.5.11	16056270  [*]	 	DATABASE PATCH SET UPDATE 10.2.0.5.11 (INCLUDES CPUAPR2013)
10.2.0.5.10	14727319 [*]	 	DATABASE PATCH SET UPDATE 10.2.0.5.10 (INCLUDES CPUJAN2013):
10.2.0.5.9	14275629 [*]	 	DATABASE PATCH SET UPDATE 10.2.0.5.9 (INCLUDES CPUOCT2012)
10.2.0.5.8	13923855 [*]	 	DATABASE PATCH SET UPDATE 10.2.0.5.8 (INCLUDES CPU JUL2012)
10.2.0.5.7	13632743 [*]	 	DATABASE PATCH SET UPDATE 10.2.0.5.7 (INCLUDES CPU APR2012)
10.2.0.5.6	13343471 [*]	 	DATABASE PATCH SET UPDATE 10.2.0.5.6 (INCLUDES CPU JAN2012)
10.2.0.5.5	12827745 [*]	 	DATABASE PSU 10.2.0.5.5 (INCLUDES CPUOCT2011)
10.2.0.5.4	12419392	 	DATABASE PSU 10.2.0.5.4 (INCLUDES CPUJUL2011)
10.2.0.5.3	11724962	 	DATABASE PSU 10.2.0.5.3 (INCLUDES CPUAPR2011)
10.2.0.5.2	10248542	 	DATABASE PSU 10.2.0.5.2 (INCLUDES CPUJAN2011)
10.2.0.5.1	9952230	 	DATABASE PSU 10.2.0.5.1 (INCLUDES CPUOCT2010)
10.2.0.5	8202632	 	10.2.0.5.0 PATCH SET FOR ORACLE DATABASE SERVER
 	 	 	 
10.2.0.4.16	16056269 [*]	 	DATABASE PSU 10.2.0.4.16 (REQUIRES PRE-REQUISITE 10.2.0.4.4 | INCLUDES CPUAPR2013)
10.2.0.4.15	14736542 [*]	 	DATABASE PSU 10.2.0.4.15 (REQUIRES PRE-REQUISITE 10.2.0.4.4 | INCLUDES CPUJAN2013):
10.2.0.4.14	14275630 [**]	 	DATABASE PSU 10.2.0.4.14 (REQUIRES PRE-REQUISITE 10.2.0.4.4 | INCLUDES CPUOCT2012)
0.2.0.4.13	13923851 [*]	 	DATABASE PSU 10.2.0.4.13 (REQUIRES PRE-REQUISITE 10.2.0.4.4 | INCLUDES CPUJUL2012)
10.2.0.4.12	12879933 [*]	 	
DATABASE PSU 10.2.0.4.12 (REQUIRES PRE-REQUISITE 10.2.0.4.4 | INCLUDES CPUAPR2012)
10.2.0.4.11	12879929 [*]	 	DATABASE PATCH SET UPDATE 10.2.0.4.11 (PRE-REQ 10.2.0.4.4 | INCLUDES CPUJAN2012)
10.2.0.4.10	12827778	 	DATABASE PSU 10.2.0.4.10 (REQUIRES PRE-REQUISITE 10.2.0.4.4 | INCLUDES CPUOCT2011)
10.2.0.4.9	12419397	 	DATABASE PSU 10.2.0.4.9 (REQUIRES PRE-REQUISITE 10.2.0.4.4 | INCLUDES CPUJUL2011)
10.2.0.4.8	11724977	 	DATABASE PSU 10.2.0.4.8 (REQUIRES PRE-REQUISITE 10.2.0.4.4 | INCLUDES CPUAPR2011)
10.2.0.4.7	10248636	 	DATABASE PSU 10.2.0.4.7 (REQUIRES PRE-REQUISITE 10.2.0.4.4 | INCLUDES CPUJAN2011)
10.2.0.4.6	9952234	 	DATABASE PSU 10.2.0.4.6 (REQUIRES PRE-REQUISITE 10.2.0.4.4 | INCLUDES CPUOCT2010) 
10.2.0.4.5	9654991	 	DATABASE PSU 10.2.0.4.5 (REQUIRES PRE-REQUISITE 10.2.0.4.4 | INCLUDES CPUJUL2010)    [overlay PSU]
10.2.0.4.4	9352164	 	DATABASE PSU 10.2.0.4.4 (INCLUDES CPUAPR2010)
10.2.0.4.3	9119284	 	DATABASE PSU 10.2.0.4.3 (INCLUDES CPUJAN2010)
10.2.0.4.2	8833280	 	DATABASE PSU 10.2.0.4.2 (INCLUDES CPUOCT2009)
10.2.0.4.1	8576156	 	DATABASE PSU 10.2.0.4.1 (INCLUDES CPUJUL2009)
10.2.0.4	6810189	 	10.2.0.4.0 PATCH SET FOR ORACLE DATABASE SERVER
10.2.0.3	5337014	 	10.2.0.3 PATCH SET FOR ORACLE DATABASE SERVER
10.2.0.2	4547817	 	10.2.0.2 PATCH SET FOR ORACLE DATABASE SERVER
 	 	 	 
10.1.0.5	4505133	 	10.1.0.5 PATCH SET FOR ORACLE DATABASE SERVER
10.1.0.4	4163362	 	10.1.0.4 PATCH SET FOR ORACLE DATABASE SERVER
10.1.0.3	3761843	 	10.1.0.3 PATCH SET FOR ORACLE DATABASE SERVER
 	 	 	 
9.2.0.8	4547809	 	9.2.0.8 PATCH SET FOR ORACLE DATABASE SERVER
9.2.0.7	4163445	 	9.2.0.7 PATCH SET FOR ORACLE DATABASE SERVER
9.2.0.6	3948480	 	9.2.0.6 PATCH SET FOR ORACLE DATABASE SERVER
9.2.0.5	3501955	 	ORACLE 9I DATABASE SERVER RELEASE 2 - PATCH SET 4 VERSION 9.2.0.5.0
9.2.0.4	3095277	 	9.2.0.4 PATCH SET FOR ORACLE DATABASE SERVER
9.2.0.3	2761332	 	9.2.0.3 PATCH SET FOR ORACLE DATABASE SERVER
9.2.0.2	2632931	 	9.2.0.2 PATCH SET FOR ORACLE DATABASE SERVER
 	 	 	 
9.0.1.5	3301544	 	9.0.1.5 PATCHSET
9.0.1.4	2517300	 	9.0.1.4 PATCH SET FOR ORACLE DATABASE SERVER
9.0.1.3	2271678	 	9.0.1.3. PATCH SET FOR ORACLE DATA SERVER
 	 	 	 
8.1.7.4	2376472	 	8.1.7.4 PATCH SET FOR ORACLE DATA SERVER
8.1.7.3	2189751	 	8.1.7.3 PATCH SET FOR ORACLE DATA SERVER
8.1.7.2	1909158	 	8.1.7.2.1 PATCH SET FOR ORACLE DATA SERVER

NOTE:

[*]   10.2.0.4 and 10.2.0.5 are now in extended support mode and PSU's released after Aug 01,2011 will need ES License to download them.

[**] Available only in limited platforms

Flashback Database

在Flashback Database中创建基于guarantee的restore point,是可以进行快速备份和恢复的方法。这对于RAT中的播放之后的数据库恢复特别有用!

下面的notes详细描述了创建和恢复restore的过程:

Restore point: 

Restore point is nothing but a name associated with a timestamp or an SCN of the database. One can create either a normal restore point or a guaranteed restore point. The difference between the two is that guaranteed restore point allows you to flashback to the restore point regardless of the DB_FLASHBACK_RETENTION_TARGET initialization parameter i.e. it is always available (assuming you have enough space in the flash recovery area).

NOTE: In this article Flashback logging was not turned ON.

Guaranteed Restore point:

Prerequisites: Creating a guaranteed restore point requires the following prerequisites:

The user must have the SYSDBA system privileges
Must have created a flash recovery area
The database must be in ARCHIVELOG mode
Create a guaranteed restore point:
After you have created or migrated a fresh database, first thing to do is to create a guaranteed restore point so you can flashback to it each time before you start a new workload. The steps are as under:

$> su – oracle
$> sqlplus / as sysdba;

Find out if ARCHIVELOG is enabled

SQL> select log_mode from v$database;

If step 3 shows that ARCHIVELOG is not enabled then continue else skip to step 8 below.

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
SQL> create restore point CLEAN_DB guarantee flashback database;

where CLEAN_DB is the name given to the guaranteed restore point.
Viewing the guaranteed restore point

SQL> select * from v$restore_point;

Verify the information about the newly created restore point. Also, note down the SCN# for reference and we will refer to it as “reference SCN#”

Flashback to the guaranteed restore point
Now, in order to restore your database to the guaranteed restore point, follow the steps below:

$> su – oracle
$> sqlplus / as sysdba;
SQL> select current_scn from v$database;
SQL> shutdown immediate;
SQL> startup mount;
SQL> select * from v$restore_point;
SQL> flashback database to restore point CLEAN_DB;
SQL> alter database open resetlogs;
SQL> select current_scn from v$database;

Compare the SCN# from step 9 above to the reference SCN#.

NOTE: The SCN# from step 9 above may not necessarily be the exact SCN# as the reference SCN# but it will be close enough.

 

SPA使用详解

这里的SPA不是说美容,而是Oracle的SQL性能优化分析器,SQL Performance Analyzer。说到SPA就不得不提Oracle关于SQL优化的几个常见的术语,SQL Tuning Advisor, SQL Tuning Set,SQL Performance Analyzer。

STS=SQL Tuning Set,SQL调优集,是一系列Oracle SQL的集合,这些SQL可以从AWR或者cursor cache中获得。可以使用DBMS_SQLTUNE包中SQL Tuning Set相关的函数和过程进行操作。

STA=SQL Tuning Advisor,SQL优化顾问,是针对SQL调优集或者SPA甚至单纯的SQL进行优化。可以使用DBMS_SQLTUNE包中SQL Tuning Advisor相关的函数和过程进行操作。

SPA=SQL Performance Analyzer,SQL性能分析器。针对数据库变更进行的性能分析。变更包括数据库升级,平台/版本/架构变更,参数调整,统计信息收集等等。SPA其实也是Oracle Real Application Testing的一个组件,另外一个组件就是前面介绍过的Database Replay。SPA的原理是通过变更前对收集的STS进行执行,获取基线数据,变更后再次进行执行,然后进行对比,从多个维度比如CPU时间,I/O,buffer get等生成详细的变更对比报告。

典型用法是捕捉STS,然后通过SPA生成对比报告,然后对变更后衰减的SQL调用STA进行优化。

下面是一个SPA的使用详解,其中的输入就是从AWR两个快照之间取的STS:


--Drop STS:
SQL> exec DBMS_SQLTUNE.DROP_SQLSET(sqlset_name => 'my_sts'); 

--Create STS:
SQL> exec DBMS_SQLTUNE.CREATE_SQLSET(sqlset_name => 'my_sts',  description => 'SQL Tuning Set for loading plan into SQL Plan Baseline'); 

--Load STS:

SQL> DECLARE 
  cur sys_refcursor;  
BEGIN 
  OPEN cur FOR 
     SELECT VALUE(P)  
     FROM TABLE(  
        dbms_sqltune.select_workload_repository(begin_snap=>257, end_snap=>258,basic_filter=>'sql_id = ''1bq7qgz7p6x46''',attribute_list=>'ALL')  
               ) p;  
     DBMS_SQLTUNE.LOAD_SQLSET( sqlset_name=> 'my_sts', populate_cursor=>cur);  
   CLOSE cur;  
END; 
/

--Create SPA TASK

SQL> declare v_spa_name varchar2(100);
  2  begin
  3  v_spa_name:=dbms_sqlpa.create_analysis_task(
  4  sqlset_name=>'my_sts',
  5  task_name=>'my_spa_task');
  6  dbms_output.put_line('spa_name='||v_spa_name);
  7  end;
  8  /
spa_name=my_spa_task

PL/SQL procedure successfully completed.

--Execute SPA TASK before change

SQL> exec dbms_sqlpa.execute_analysis_task(task_name=>'my_spa_task',execution_type=>'test execute', execution_name=>'my_exec_before_change');

PL/SQL procedure successfully completed.


--make change now....

SQL> select index_name from dba_indexes where table_name='MY_OBJECTS';

INDEX_NAME
------------------------------
MY_OBJECTS_INDEX_01

SQL> drop index spa_test_user.MY_OBJECTS_INDEX_01;

Index dropped.

--Execute SPA TASK after change

SQL> exec dbms_sqlpa.execute_analysis_task(task_name=>'my_spa_task',execution_type=>'test execute', execution_name=>'my_exec_after_change');

PL/SQL procedure successfully completed.

--Get report or compare report

SQL> var rep clob;
SQL> exec :rep:=dbms_sqlpa.report_analysis_task('my_spa_task','text','typical','summary');

PL/SQL procedure successfully completed.

SQL> set long 100000 longchunksize 100000 linesize 130
SQL> print :rep

REP
----------------------------------------------------------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name		  : my_spa_task
Tuning Task Owner		  : SYS
Workload Type			  : SQL Tuning Set
Execution Count 		  : 2
Current Execution		  : my_exec_after_change
Execution Type			  : TEST EXECUTE
Scope				  : COMPREHENSIVE
Completion Status		  : COMPLETED
Started at			  : 03/14/2013 14:58:00
Completed at			  : 03/14/2013 14:58:08
SQL Tuning Set (STS) Name	  : my_sts
SQL Tuning Set Owner		  : SYS
Number of Statements in the STS   : 79
Number of SQLs Analyzed 	  : 79
Number of SQLs in the Report	  : 79
Number of SQLs with Findings	  : 1
Number of SQLs with Errors	  : 5

-------------------------------------------------------------------------------
SUMMARY SECTION
-------------------------------------------------------------------------------
		     SQL Statements Ordered by Elapsed Time
-------------------------------------------------------------------------------
			 Parse	  Elapsed    CPU     Buffer  Optimizer
object ID  SQL ID	 Time (s) Time (s) Time (s)   Gets     Cost
---------- ------------- -------- -------- -------- -------- ---------
	86 1bx8mgs8by25x .005597  .157076  .108483     3214	  144
       147 dayq182sk41ks .000288  .143791  .089486	  0	    1
       137 bm2pwrpcr8ru6 .000155  .143363  .093819	  0	    1
       139 bunssq950snhf .000356  .142137  .091986	  0	    1
	87 1cq3qr774cu45 .001988  .036542  .003221	  0	    5
       107 5dfmd823r8dsp .002836  .030445  .019774	  0	    2
	97 350myuyx0t1d6 .006113  .008463  .000999	 12	    3
       152 f0s0bk5k713yb .000248  .005393  .003666	  0	    2
       119 7sxujr2u5ddy4 .000271  .004132  .000666	  0	    1
	91 1sd9s6z4gs4c5 .000135  .003598  .002444	816	  229
	96 32mk33ry1g665  .00201  .003385  .000333	  8	    2
       133 ab9rc63zxa4bj .062683  .003121  .001222	205	   13
       116 6xpsr8v27pmy2 .001445  .002782  .001888	  0	    1
       146 d0hs62mdytbk1 .004535  .002498  .001777	 32	   16
       121 7xshr7maxf6rc .004096  .002443  .001777	242	   13
       141 by4un3fmx698z .010119  .002443  .001666	 62	   13
       127 95jvkhg3t7rqj .163061   .00239  .001666	184	   23
       114 6m6b8kbv1dt4c  .02843  .002303  .001666	188	   50
       157 gcpj8av4kx6j2 .011175  .002274  .001666	 62	   13
	89 1nay5fd0d17km .009615  .002213  .001444	 62	   13
       100 4002tnht9dwhw .012735  .002199  .001444	 62	   13
       113 6d1jnnuhkt8wy .035774  .002051  .001333	214	   29
       104 4ku91umkgpmmr .027785  .001845   .00111	188	   47
       132 9vqb56yc6w899 .012859  .001827  .000777	  7	   13
       123 86v8m3jqnpxmu .012963   .00152  .001222	 12	   14
       135 b5576mqw15vum .023645  .001499  .001222	 12	   14
	83 0n1919jrgz485 .036324  .001243  .000666	226	   17
       150 dnwpm0gdccrph .000486  .000846  .000444	  0	    1
       149 ddnxm4tfc08nm .000813  .000633  .000333	 10	    8
	90 1rbz9nrbs8wyg .031264  .000401  .000222	 56	   21
       122 7yjzq240hcd2c .006697  .000209  .000222	  6	  703
       134 aca4xvmz0rzup  .00341  .000199	 0	  1	    1
       115 6wm3n4d7bnddg .019572   .00019  .000111	 16	   27
       158 gdfb17u17m2k2 .016272  .000187  .000222	 56	   19
       138 bq584rmaa85ua  .00917  .000156  .000222	 62	   19
       102 43wq1yur8h8u2 .000796  .000132	 0	  4	    3
       101 40mgxk6ty822a .001024  .000115  .000111	 11	    5
       109 5km6gkvuh3n43 .000391  .000103  .000111	  2	    1
       140 bwsz40d3hc8q7 .000498  .000103	 0	  0	    0
       128 971vpk0tp7ahm .000176  .000093	 0	  2	    3
       111 5n1fs4m2n2y0r .000199  .000089  .000111	  3	    2
	84 12hhcr6ucw6mb .004583  .000076  .000111	  8	    7
       118 7ntngwmf9bf4p  .01232   .00007  .000111	 16	   12
       129 9n8xc314xdm0t .000665  .000061	 0	  0	    4
	99 3ktacv9r56b51 .000519  .000052	 0	  7	   10
       148 dcstr36r0vz0d  .00067  .000046	 0	  3	    4
       117 7ng34ruy5awxq  .00687  .000044	 0	  7	    5
       142 c6awqs517jpj0 .000071  .000042  .000111	  2	    3
       112 69k5bhm12sz98 .000619  .000039	 0	  6	    3
       126 8wutkrpf8j81q .000162  .000039  .000111	  2	    2
       108 5j4c2v06qdhqq .000549  .000036	 0	  2	    2
	88 1gu8t96d0bdmu .000046  .000035	 0	  4	    2
       105 53saa2zkr6wc3 .000243  .000032	 0	  3	    3
	95 32hbap2vtmf53 .000445  .000031	 0	  4	    3
       124 87gaftwrm2h68 .000416  .000029	 0	  3	    3
       130 9q5jas50b88ud .006783  .000026	 0	  3	    3
       103 46zsasxjf8hb9 .000157  .000025  .000111	  0	    0
       131 9tgj4g8y4rwy8 .000233  .000025	 0	  3	    2
       151 dzan2tgvtkzdw .009243  .000025	 0	  3	    2
	93 2xgubd6ayhyb1 .000061  .000024	 0	  2	    2
       125 8swypbbr0m372 .000319  .000024	 0	  2	    3
       154 fa0uzvspp236d .006965  .000024	 0	  1	   27
       159 gj6uc50hpnr1p .000297  .000023	 0	  0	    1
       156 ga9j9xk5cy9s0 .000461  .000021	 0	  2	    3
       144 cqqwzhmfk5acd .000064   .00002	 0	  1	    0
       145 cvn54b7yz0s8u .000282   .00002	 0	  2	    3
	98 39m4sx9k63ba2 .000262  .000019	 0	  2	    3
       136 bgjhtnqhr5u9h .000269  .000019	 0	  2	    3
       155 g3wrkmxkxzhf2 .000679  .000019	 0	  3	    2
	94 317v5hnvvd49h .013503  .000018	 0	  0	   74
       110 5ms1dhxbadq64 .001107  .000018	 0	  1	    1
       161 grwydz59pu6mc .000122  .000013	 0	  0	    1
       153 f0wj261bm8snd .000329  .000012	 0	  1	    1

-------------------------------------------------------------------------------
			     Statements with Errors
-------------------------------------------------------------------------------
object ID  SQL ID	 Error
---------- ------------- ------------------------------------------------------
	92 2tv1pqg3v08aa ORA-00932: inconsistent datatypes: expected UDT got...
       106 572fbaj0fdw2b ORA-20020: Database/Instance / does not exist in DB...
       120 7u3jnmmaw8gg1 ORA-00932: inconsistent datatypes: expected UDT got...
       143 cj86nch2p483y ORA-00932: inconsistent datatypes: expected UDT got...
       160 gman4yn14jyfz ORA-00932: inconsistent datatypes: expected UDT got...

-------------------------------------..." - rest of line ignored.-------------
SQL> 

SQL> exec dbms_sqlpa.execute_analysis_task(task_name=>'my_spa_task',execution_type=>'compare performance', execution_name=>'compare');

PL/SQL procedure successfully completed.

SQL> var rep clob;
SQL> exec :rep:=dbms_sqlpa.report_analysis_task('my_spa_task','text','typical','summary');

PL/SQL procedure successfully completed.

SQL> print :rep

REP
----------------------------------------------------------------------------------------------------------------------------------
General Information
---------------------------------------------------------------------------------------------

 Task Information:				Workload Information:
 ---------------------------------------------	---------------------------------------------
  Task Name    : my_spa_task			 SQL Tuning Set Name	    : my_sts
  Task Owner   : SYS				 SQL Tuning Set Owner	    : SYS
  Description  :				 Total SQL Statement Count  : 79

Execution Information:
---------------------------------------------------------------------------------------------
  Execution Name	     : compare		      Started		  : 03/14/2013 15:00:59
  Execution Type	     : COMPARE PERFORMANCE    Last Updated	  : 03/14/2013 15:01:00
  Description		     :			      Global Time Limit   : UNLIMITED
  Scope 		     : COMPREHENSIVE	      Per-SQL Time Limit  : UNUSED
  Status		     : COMPLETED	      Number of Errors	  : 5
  Number of Unsupported SQL  : 1

Analysis Information:
---------------------------------------------------------------------------------------------
 Before Change Execution:			After Change Execution:
 ---------------------------------------------	---------------------------------------------
  Execution Name      : my_exec_before_change	 Execution Name      : my_exec_after_change
  Execution Type      : TEST EXECUTE		 Execution Type      : TEST EXECUTE
  Scope 	      : COMPREHENSIVE		 Scope		     : COMPREHENSIVE
  Status	      : COMPLETED		 Status 	     : COMPLETED
  Started	      : 03/14/2013 14:54:39	 Started	     : 03/14/2013 14:58:00
  Last Updated	      : 03/14/2013 14:54:47	 Last Updated	     : 03/14/2013 14:58:08
  Global Time Limit   : UNLIMITED		 Global Time Limit   : UNLIMITED
  Per-SQL Time Limit  : UNUSED			 Per-SQL Time Limit  : UNUSED
  Number of Errors    : 5			 Number of Errors    : 5

 ---------------------------------------------
 Comparison Metric: ELAPSED_TIME
 ------------------
 Workload Impact Threshold: 1%
 --------------------------
 SQL Impact Threshold: 1%
 ----------------------

Report Summary
---------------------------------------------------------------------------------------------

Projected Workload Change Impact:
-------------------------------------------
 Overall Impact      :	-1.49%
 Improvement Impact  :	0%
 Regression Impact   :	-1.49%

SQL Statement Count
-------------------------------------------
 SQL Category  SQL Count  Plan Change Count
 Overall	      79		  1
 Regressed	       1		  0
 Unchanged	      72		  1
 with Errors	       5		  0
 Unsupported	       1		  0

Top 73 SQL Sorted by Absolute Value of Change Impact on the Workload
---------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
|	    |		    | Impact on | Execution | Metric | Metric | Impact	 | Plan   |
| object_id | sql_id	    | Workload	| Frequency | Before | After  | on SQL	 | Change |
-------------------------------------------------------------------------------------------
|	166 | 1cq3qr774cu45 |	 -1.49% |	  1 |  25755 |	36542 |  -41.88% | n	  |
|	226 | dayq182sk41ks |	  -.71% |	  1 | 138657 | 143791 |    -3.7% | n	  |
|	204 | 8swypbbr0m372 |	   .65% |	 72 |	  89 |	   24 |   73.03% | n	  |
|	176 | 350myuyx0t1d6 |	   .58% |	  1 |  12668 |	 8463 |   33.19% | n	  |
|	216 | bm2pwrpcr8ru6 |	   .41% |	  1 | 146357 | 143363 |    2.05% | n	  |
|	165 | 1bx8mgs8by25x |	  -.36% |	  1 | 154450 | 157076 |    -1.7% | n	  |
|	178 | 3ktacv9r56b51 |	   .31% |	 72 |	  83 |	   52 |   37.35% | n	  |
|	186 | 5dfmd823r8dsp |	  -.26% |	  1 |  28546 |	30445 |   -6.65% | n	  |
|	218 | bunssq950snhf |	  -.21% |	  1 | 140601 | 142137 |   -1.09% | n	  |
|	212 | ab9rc63zxa4bj |	  -.21% |	  1 |	1613 |	 3121 |  -93.49% | n	  |
|	240 | grwydz59pu6mc |	  -.18% |	639 |	  11 |	   13 |  -18.18% | n	  |
|	211 | 9vqb56yc6w899 |	  -.17% |	  1 |	 620 |	 1827 | -194.68% | n	  |
|	198 | 7sxujr2u5ddy4 |	   -.1% |	  1 |	3416 |	 4132 |  -20.96% | n	  |
|	174 | 32hbap2vtmf53 |	  -.09% |	 66 |	  21 |	   31 |  -47.62% | n	  |
|	170 | 1sd9s6z4gs4c5 |	  -.08% |	  1 |	2995 |	 3598 |  -20.13% | y	  |
|	231 | f0s0bk5k713yb |	  -.06% |	  1 |	4960 |	 5393 |   -8.73% | n	  |
|	184 | 53saa2zkr6wc3 |	   .06% |	 36 |	  44 |	   32 |   27.27% | n	  |
|	190 | 5n1fs4m2n2y0r |	  -.05% |	  6 |	  23 |	   89 | -286.96% | n	  |
|	229 | dnwpm0gdccrph |	  -.05% |	  1 |	 514 |	  846 |  -64.59% | n	  |
|	188 | 5km6gkvuh3n43 |	  -.04% |	  4 |	  23 |	  103 | -347.83% | n	  |
|	207 | 971vpk0tp7ahm |	  -.04% |	  4 |	  18 |	   93 | -416.67% | n	  |
|	213 | aca4xvmz0rzup |	  -.04% |	  2 |	  54 |	  199 | -268.52% | n	  |
|	225 | d0hs62mdytbk1 |	  -.04% |	  1 |	2229 |	 2498 |  -12.07% | n	  |
|	200 | 7xshr7maxf6rc |	   .03% |	  1 |	2665 |	 2443 |    8.33% | n	  |
|	192 | 6d1jnnuhkt8wy |	   .03% |	  1 |	2240 |	 2051 |    8.44% | n	  |
|	179 | 4002tnht9dwhw |	  -.02% |	  1 |	2031 |	 2199 |   -8.27% | n	  |
|	214 | b5576mqw15vum |	  -.02% |	  1 |	1346 |	 1499 |  -11.37% | n	  |
|	193 | 6m6b8kbv1dt4c |	  -.02% |	  1 |	2163 |	 2303 |   -6.47% | n	  |
|	220 | by4un3fmx698z |	   .02% |	  1 |	2571 |	 2443 |    4.98% | n	  |
|	196 | 7ng34ruy5awxq |	   .02% |	  6 |	  64 |	   44 |   31.25% | n	  |
|	201 | 7yjzq240hcd2c |	  -.02% |	  1 |	  92 |	  209 | -127.17% | n	  |
|	169 | 1rbz9nrbs8wyg |	  -.02% |	  1 |	 287 |	  401 |  -39.72% | n	  |
|	162 | 0n1919jrgz485 |	   .01% |	  1 |	1350 |	 1243 |    7.93% | n	  |
|	221 | c6awqs517jpj0 |	  -.01% |	  4 |	  19 |	   42 | -121.05% | n	  |
|	195 | 6xpsr8v27pmy2 |	   .01% |	  1 |	2873 |	 2782 |    3.17% | n	  |
|	181 | 43wq1yur8h8u2 |	  -.01% |	  1 |	  50 |	  132 |    -164% | n	  |
|	206 | 95jvkhg3t7rqj |	   .01% |	  1 |	2465 |	 2390 |    3.04% | n	  |
|	228 | ddnxm4tfc08nm |	  -.01% |	  1 |	 559 |	  633 |  -13.24% | n	  |
|	227 | dcstr36r0vz0d |	   .01% |	  4 |	  64 |	   46 |   28.13% | n	  |
|	194 | 6wm3n4d7bnddg |	  -.01% |	  1 |	 121 |	  190 |  -57.02% | n	  |
|	219 | bwsz40d3hc8q7 |	   .01% |	  1 |	 172 |	  103 |   40.12% | n	  |
|	168 | 1nay5fd0d17km |	  -.01% |	  1 |	2146 |	 2213 |   -3.12% | n	  |
|	234 | g3wrkmxkxzhf2 |	   .01% |	 67 |	  20 |	   19 |       5% | n	  |
|	175 | 32mk33ry1g665 |	  -.01% |	  1 |	3321 |	 3385 |   -1.93% | n	  |
|	205 | 8wutkrpf8j81q |	  -.01% |	  4 |	  23 |	   39 |  -69.57% | n	  |
|	237 | gdfb17u17m2k2 |	  -.01% |	  1 |	 130 |	  187 |  -43.85% | n	  |
|	203 | 87gaftwrm2h68 |	  -.01% |	  8 |	  22 |	   29 |  -31.82% | n	  |
|	230 | dzan2tgvtkzdw |	   .01% |	  1 |	  81 |	   25 |   69.14% | n	  |
|	167 | 1gu8t96d0bdmu |	  -.01% |	  6 |	  26 |	   35 |  -34.62% | n	  |
|	189 | 5ms1dhxbadq64 |	   .01% |	  1 |	  72 |	   18 |      75% | n	  |
|	187 | 5j4c2v06qdhqq |	   .01% |	  4 |	  49 |	   36 |   26.53% | n	  |
|	236 | gcpj8av4kx6j2 |	   .01% |	  1 |	2322 |	 2274 |    2.07% | n	  |
|	180 | 40mgxk6ty822a |	   .01% |	  1 |	 156 |	  115 |   26.28% | n	  |
|	217 | bq584rmaa85ua |	     0% |	  1 |	 121 |	  156 |  -28.93% | n	  |
|	209 | 9q5jas50b88ud |	     0% |	  1 |	  50 |	   26 |      48% | n	  |
|	197 | 7ntngwmf9bf4p |	     0% |	  1 |	  93 |	   70 |   24.73% | n	  |
|	173 | 317v5hnvvd49h |	     0% |	  1 |	  39 |	   18 |   53.85% | n	  |
|	191 | 69k5bhm12sz98 |	     0% |	  2 |	  48 |	   39 |   18.75% | n	  |
|	215 | bgjhtnqhr5u9h |	     0% |	  4 |	  22 |	   19 |   13.64% | n	  |
|	183 | 4ku91umkgpmmr |	     0% |	  1 |	1856 |	 1845 |     .59% | n	  |
|	235 | ga9j9xk5cy9s0 |	     0% |	  4 |	  19 |	   21 |  -10.53% | n	  |
|	208 | 9n8xc314xdm0t |	     0% |	  1 |	  67 |	   61 |    8.96% | n	  |
|	210 | 9tgj4g8y4rwy8 |	     0% |	  6 |	  24 |	   25 |   -4.17% | n	  |
|	232 | f0wj261bm8snd |	     0% |	  2 |	  15 |	   12 |      20% | n	  |
|	202 | 86v8m3jqnpxmu |	     0% |	  1 |	1515 |	 1520 |    -.33% | n	  |
|	163 | 12hhcr6ucw6mb |	     0% |	  1 |	  72 |	   76 |   -5.56% | n	  |
|	172 | 2xgubd6ayhyb1 |	     0% |	  4 |	  23 |	   24 |   -4.35% | n	  |
|	177 | 39m4sx9k63ba2 |	     0% |	  4 |	  18 |	   19 |   -5.56% | n	  |
|	224 | cvn54b7yz0s8u |	     0% |	  4 |	  19 |	   20 |   -5.26% | n	  |
|	182 | 46zsasxjf8hb9 |	     0% |	  1 |	  22 |	   25 |  -13.64% | n	  |
|	223 | cqqwzhmfk5acd |	     0% |	  1 |	  18 |	   20 |  -11.11% | n	  |
|	238 | gj6uc50hpnr1p |	     0% |	  1 |	  24 |	   23 |    4.17% | n	  |
|	233 | fa0uzvspp236d |	     0% |	  1 |	  24 |	   24 |       0% | n	  |
-------------------------------------------------------------------------------------------
Note: time statistics are displayed in microseconds
---------------------------------------------------------------------------------------------