【文章內(nèi)容簡介】
rant plustrace to dba with admin option。授權(quán)成功。SQLSQL set echo off DBA用戶首先被授予了plustrace角色,然后我們可以把plustrace授予public這樣所有用戶都將擁有plustrace角色的權(quán)限.SQL grant plustrace to public 。授權(quán)成功。然后我們就可以使用AutoTrace的功能了.SQL connect eqsp/eqsp已連接。SQL set autotrace onSQL set timing onSQL 關(guān)于Autotrace幾個(gè)常用選項(xiàng)的說明:SET AUTOTRACE OFF 不生成AUTOTRACE 報(bào)告,這是缺省模式SET AUTOTRACE ON EXPLAIN AUTOTRACE只顯示優(yōu)化器執(zhí)行路徑報(bào)告 SET AUTOTRACE ON STATISTICS 只顯示執(zhí)行統(tǒng)計(jì)信息SET AUTOTRACE ON 包含執(zhí)行計(jì)劃和統(tǒng)計(jì)信息 SET AUTOTRACE TRACEONLY 同set autotrace on,但是不顯示查詢輸出 SQL set autotrace traceonlySQL select table_name from user_tables。已選擇98行。已用時(shí)間: 00: 00: Execution Plan0 SELECT STATEMENT Optimizer=CHOOSE1 0 NESTED LOOPS2 1 NESTED LOOPS (OUTER)3 2 NESTED LOOPS (OUTER)4 3 NESTED LOOPS (OUTER)5 4 NESTED LOOPS (OUTER)6 5 NESTED LOOPS7 6 TABLE ACCESS (BY INDEX ROWID) OF 39。OBJ$39。8 7 INDEX (RANGE SCAN) OF 39。I_OBJ239。 (UNIQUE)9 6 TABLE ACCESS (CLUSTER) OF 39。TAB$39。10 9 INDEX (UNIQUE SCAN) OF 39。I_OBJ39。 (NONUNIQUE)11 5 TABLE ACCESS (BY INDEX ROWID) OF 39。OBJ$39。12 11 INDEX (UNIQUE SCAN) OF 39。I_OBJ139。 (UNIQUE)13 4 INDEX (UNIQUE SCAN) OF 39。I_OBJ139。 (UNIQUE)14 3 TABLE ACCESS (CLUSTER) OF 39。USER$39。15 14 INDEX (UNIQUE SCAN) OF 39。I_USER39。 (NONUNIQUE)16 2 TABLE ACCESS (CLUSTER) OF 39。SEG$39。17 16 INDEX (UNIQUE SCAN) OF 39。I_FILE_BLOCK39。 (NONUNIQUE)18 1 TABLE ACCESS (CLUSTER) OF 39。TS$39。19 18 INDEX (UNIQUE SCAN) OF 39。I_TS39。 (NONUNIQUE)Statistics0 recursive calls0 db block gets1389 consistent gets0 physical reads0 redo size2528 bytes sent via SQL*Net to client569 bytes received via SQL*Net from client8 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)98 rows processedSQL和oracle數(shù)據(jù)庫類似,db2數(shù)據(jù)庫也有相應(yīng)的圖形界面的診斷工具:活動(dòng)監(jiān)視器。啟動(dòng)界面如下:按照向?qū)У奶崾具x項(xiàng)進(jìn)行選擇數(shù)據(jù)庫信息以后,就進(jìn)入到如下選擇監(jiān)視任務(wù)的界面: 在這個(gè)界面里可以選擇系統(tǒng)定義的監(jiān)控內(nèi)容,也可以自己定義一個(gè)監(jiān)控任務(wù)。選定好以后,就進(jìn)行入到了如下的界面??梢栽趫?bào)告欄中選擇關(guān)心的運(yùn)行指標(biāo)來顯示,可以指定一個(gè)顯示的刷新的頻率?!∪绻玫搅艘粋€(gè)有價(jià)值的顯示信息,可以把當(dāng)前的報(bào)告通過生成文本報(bào)告的形式保留下來?!【唧w可以通過選擇“活動(dòng)監(jiān)視器”菜單的下的“保存報(bào)告輸出”選項(xiàng)。 除了活動(dòng)監(jiān)視器以外,db2還提供了很多其他的圖形界面工具。如可以使用“內(nèi)存可視化器”來監(jiān)控db2數(shù)據(jù)庫的內(nèi)存的使用的情況。除了圖形界面,也可以通過命令通過來抓去snaoshot( 快照)的方式來詳細(xì)的監(jiān)控?cái)?shù)據(jù)庫的運(yùn)行情況:在db2數(shù)據(jù)庫可以抓取如下幾項(xiàng)的快照。在抓去之前先要打開監(jiān)控的開關(guān):命令如下:db2 update monitor switches using table on bufferpool on statement on sort on LOCK ON抓取快照的命令如下:db2 get snapshot for bufferpools on db1122db2 get snapshot for tables on db1122db2 get snapshot for dynamic sql on db1122db2 get snapshot for database on db1122db2 get snapshot for applications on db1122生成的文件放在當(dāng)前的目錄下面。值得注意的是:這個(gè)監(jiān)控是實(shí)例級(jí)別的,所以抓取快照的命令要在db2cmd的界面下輸入。監(jiān)控死鎖可以有兩種方式。一種是通過數(shù)據(jù)庫級(jí)別的snapshot來觀測在測試期間是否有死鎖發(fā)生,在數(shù)據(jù)庫級(jí)別的snapshot是一個(gè)全局的快照,概括了數(shù)據(jù)庫運(yùn)行的整體情況。其中有一部分是描述鎖信息的,詳細(xì)如下:當(dāng)前掛起的鎖定 = 125鎖定等待 = 18數(shù)據(jù)庫等待鎖定時(shí)間(毫秒) = 未收集在使用的鎖定列表內(nèi)存(以字節(jié)計(jì))= 20040檢測到死鎖 = 0鎖定升級(jí) = 0互斥鎖定升級(jí) = 0當(dāng)前正等待鎖定的代理程序數(shù) = 0鎖定超時(shí) = 0不確定事務(wù)數(shù) = 0如果在"檢測到死鎖"該項(xiàng)的值大于0,則表示有死鎖的情況發(fā)生。這是可以參照lock 和db2目錄下的死鎖的詳細(xì)信息來查看。第二種方式是直接在db2數(shù)據(jù)庫的目錄察看死鎖的信息。目錄類似如下:D:\DB2\NODE0000\SQL00019\DB2EVENT\db2detaildeadlock目錄下面有兩個(gè)文件:一個(gè)是控制文件,一個(gè)是記錄事件的記錄文件。其中控制文件記載了監(jiān)控時(shí)間的一些信息,如監(jiān)控的數(shù)據(jù)庫信息等等。,不能夠直接的打開,需要通過在db2cmd的命令界面下輸入如下的命令把evt文件解析成文本文件:Db2evmon path ./ 詳見下圖:運(yùn)行完以后。在這個(gè)目錄中會(huì)紀(jì)錄死鎖的詳細(xì)的信息。和快照不同的是,這個(gè)目錄文件記錄的是自從數(shù)據(jù)庫啟動(dòng)死鎖監(jiān)控以后的所發(fā)生的所有的死鎖情況。4數(shù)據(jù)庫的性能調(diào)整的一般方法 IO調(diào)整 IO的調(diào)整對(duì)sqlserver數(shù)據(jù)庫同樣需要。 我們的帳套默認(rèn)是放在一個(gè)文件中的,這樣的當(dāng)數(shù)據(jù)量增大以后,io的問題會(huì)影響數(shù)據(jù)庫的運(yùn)行的性能??梢酝ㄟ^添加文件的方式來分離io。還可以通過創(chuàng)建索引的時(shí)候指定創(chuàng)建的文件組的方式,來分開索引和數(shù)據(jù)等等。 如果語句有大量的表掃描,則也是產(chǎn)生大量的IO。調(diào)整io的一個(gè)很重要的方面是調(diào)整語句。盡量讓語句使用到最佳的執(zhí)行方式。 阻塞要檢測SQL Server的數(shù)據(jù)庫阻塞,可以采用兩種方法之一: 使用SQL Server企業(yè)管理器當(dāng)發(fā)現(xiàn)可能存在數(shù)據(jù)庫阻塞時(shí),打開SQL Server的“企業(yè)管理器”,展開發(fā)生阻塞的數(shù)據(jù)庫服務(wù)器的“管理”夾,一直到展開“鎖/進(jìn)程 ID”,在此下面會(huì)列出類似 SPID xxx的項(xiàng)目,這些就是當(dāng)前數(shù)據(jù)庫上的連接。當(dāng)發(fā)生阻塞時(shí),至少會(huì)存在兩個(gè)帶鎖的 SPID xxx項(xiàng)目,且以醒目的紅色標(biāo)注,點(diǎn)擊相應(yīng)的SPID xxx項(xiàng)目,在右邊的窗格中會(huì)顯示出該數(shù)據(jù)庫連接所獲得的鎖和類型等信息。另外,阻塞時(shí)的連接有兩種類型,一種是被阻塞的連接,另一種是阻塞源,通過SPID xxx標(biāo)簽的說明可以知道,但對(duì)于具體發(fā)生阻塞的原因,此方法并沒有太大的幫助,只能確定是否有阻塞。 使用阻塞檢測腳本使用SQL Server企業(yè)管理器來檢查阻塞,通常帶有很大的隨機(jī)性,特別是可能當(dāng)意識(shí)到有阻塞時(shí),再打開企業(yè)管理器的時(shí)候,可能阻塞就自動(dòng)解除,只能等待阻塞的下一次重現(xiàn)。為此,我們需要使用一種類似后臺(tái)運(yùn)行的方法,以批定的采樣頻率檢測數(shù)據(jù)庫可能的阻塞,如果有阻塞,則以阻塞列表的形式打印出來,而且要盡量不能干擾現(xiàn)有系統(tǒng)的運(yùn)行。為此,我們使用了微軟提供的特別優(yōu)化的阻塞檢測腳本:在SQL SERVER服務(wù)器上運(yùn)行該腳本后,會(huì)在master系統(tǒng)數(shù)據(jù)庫中創(chuàng)建一個(gè)名為sp_blocker_pss80的存儲(chǔ)過程,當(dāng)需要檢測某段時(shí)間內(nèi)阻塞的情況時(shí),請(qǐng)使用SQL終端(SQL查詢分析器,或者是OSQL、ISQL)編寫如下的腳本并執(zhí)行:WHILE 1=1BEGIN EXEC Or for fast mode EXEC @fast=1 Or for latch mode EXEC @latch=1 WAITFOR DELAY 39。00:00:1539。ENDGO請(qǐng)注意,為了不影響性能,通常延遲的值不小于5秒,而且不大于60秒。 Topsql語句調(diào)整 可以在事件探查器中發(fā)現(xiàn)有大量讀操作的sql語句。在針對(duì)這些語句進(jìn)行分析和調(diào)整。調(diào)整方式是添加和調(diào)整索引的定義,盡量避免對(duì)有大量數(shù)據(jù)的表上使用全表掃描操作?!?duì)于oracle數(shù)據(jù)庫,如下的幾個(gè)方面可能會(huì)影響數(shù)據(jù)庫的運(yùn)行效率,需要進(jìn)行監(jiān)控和調(diào)整。 ?。保畠?nèi)存?! 。玻甀O?! 。常偁帯! 。矗甌opsql。 Oracle數(shù)據(jù)庫有很多方式查看上述幾項(xiàng)的運(yùn)行情況。但最常用的方式是做statspack,通過生成的報(bào)告來發(fā)現(xiàn)問題,再結(jié)合os收集的信息一起來定位問題?! ?nèi)存使用情況 可以通過查看statspack報(bào)告中的各個(gè)內(nèi)存區(qū)的命中率來判斷是否足夠。一般要求bufferpool和 share pool的命中率要分別在90%和99以上。否則會(huì)影響數(shù)據(jù)庫的運(yùn)行性能。如果命中率不夠則要適當(dāng)放大該內(nèi)存的大小?! ∪绻到y(tǒng)同時(shí)還要一定數(shù)量的并發(fā)連接,還要計(jì)算好pga_aggregate_target的大小。以免內(nèi)存空間不夠。 這部分的調(diào)整相對(duì)較難,主要由DBA進(jìn)行處理和調(diào)整。