国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

數據庫性能檢查指導方案 - Part I

2024-07-21 02:11:34
字體:
來源:轉載
供稿:網友

數據庫性能檢查指導方案

 

author: kamus

date:2004-9

 

在系統穩定之后,應該按照本指導方案每個月檢查一次產品數據庫。

該指導方案適用于oracle9i數據庫,因為有些腳本在9i中才可以運行。

檢查方式均為以sysdba身份登錄數據庫以后在sqlplus中執行命令腳本(每小節的“檢查方法”部分有詳細的命令腳本)。

登陸數據庫的命令:

sqlplus “sys/password as sysdba”

 

一.內存性能評估

在內存性能評估的時候,我們使用內存性能指數(mpi, memory performance index),下表列出了mpi中的各項指數,這個評分系統并不意味著對內存的使用和分配的全方位評估,而只是代表一個晴雨表,反映當前系統內存的使用和分配狀況。

 

mpi指數

分類

所需等級

最高分

緩沖區命中率(buffer cache)

>98%

30

數據字典命中率(dictionary cache)

>98%

30

庫緩存命中率(library cache)

>98%

30

內存中的排序(sort in memory)

>98%

30

空閑的數據緩沖區比例

10-25%

30

使用最多的前10個sql占用的內存

<5%

60

是否已經調整使用最多的前25個sql



30

是否嘗試固定高速緩存中經常使用的對象



10

mpi指數

總分

250

 

1. 緩沖區命中率

顯示了對于數據總讀取量而言,非磁盤讀取(緩沖區命中)的百分比。當然,十分高的命中率并不代表數據庫性能一定優良,也有可能是糟糕的sql引起了大量的緩沖區讀操作,只有在已經調整過首要的查詢之后,這個命中率才能更好地反映數據庫性能。

 

檢查方法:

select (1 - (sum(decode(name, 'physical reads', value, 0)) /
       (sum(decode(name, 'db block gets', value, 0)) +
       sum(decode(name, 'consistent gets', value, 0))))) * 100
       "hit ratio"
  from v$sysstat;

 

評估準則:

等級

分數

<90%

0

90-94%

10

95-98%

20

>98%

30

 

2. 數據字典命中率

顯示了對數據字典和其它對象的內存讀操作的百分比。

 

檢查方法:

select (1 - (sum(getmisses) / sum(gets))) * 100 "hit ratio"
  from v$rowcache;

 

評估準則:

等級

分數

<85%

0

86-92%

10

92-98%

20

>98%

30

 

3. 庫緩存命中率

顯示了對sql和pl/sql對象的內存讀操作的百分比。同樣注意,很高的命中率并不總是反映數據庫性能優秀。

 

檢查方法:

select sum(pins) / (sum(pins) + sum(reloads)) * 100 "hit ratio"
  from v$librarycache;

 

評估準則:

等級

分數

<90%

0

90-94%

10

94-98%

20

>98%

30

 

4. 內存中的排序

根據初始化參數pga_aggregate_target或者sort_area_size的值,用戶的排序操作可能在內存中執行,也可能在臨時表空間中執行。這個檢查用以顯示在內存中排序占總排序的百分比。

 

檢查方法:

select a.value "disk sorts",
       b.value "memory sorts",
       round((100 * b.value) /
             decode((a.value + b.value), 0, 1, (a.value + b.value)),
             2) "pct memory sorts"
  from v$sysstat a, v$sysstat b
 where a.name = 'sorts (disk)'
   and b.name = 'sorts (memory)';

 

評估準則:

等級

分數

<90%

0

90-94%

10

94-98%

20

>98%

30

 

5. 空閑的數據緩沖區比例

空閑的記錄數除以x$bh表中的記錄總數(即所分配的數據塊緩沖區的總數)得到的空閑緩沖區百分比。同樣注意,擁有眾多空閑緩沖區的數據庫不一定是最佳環境,因為可能是緩沖區設置過大,浪費內存。

 

檢查方法:

select decode(state,
              0,
              'free',
              1,
              decode(lrba_seq, 0, 'available', 'being used'),
              3,
              'being used',
              state) "block status",
       count(*)
  from x$bh
 group by decode(state,
                 0,
                 'free',
                 1,
                 decode(lrba_seq, 0, 'available', 'being used'),
                 3,
                 'being used',
                 state);

 

評估準則:

等級

分數

<5%

0

5-19%

30

20-25%

20

>25%

0

 

 

6. 最浪費內存的前10個語句占全部內存讀取量的比例

通常一個沒有優化系統中,10個最常用的sql語句的訪問量會占到整個系統中內存讀操作的50%以上。這些sql是最需要進行優化的部分,也是優化工作中優先級很高的部分。

 

檢查方法:

select sum(pct_bufgets)
  from (select rank() over(order by buffer_gets desc) as rank_bufgets,
               to_char(100 * ratio_to_report(buffer_gets) over(), '999.99') pct_bufgets
          from v$sqlarea)
 where rank_bufgets < 11;

 

評估準則:

等級

分數

<5%

60

5-19%

50

20-25%

30

>25%

0

 

7. 調整前25個最浪費內存的語句

在沒有調整的情況下,絕大多數系統中,訪問量占前25位的語句的內存讀操作將占用整個系統所有內存讀操作的75%,對這部分語句進行調整是至關重要的。這部分腳本用于獲得訪問量占前25位的sql語句。

 

檢查方法:

set serveroutput on size 1000000
declare
  top25 number;
  text1 varchar2(4000);
  x     number;
  len1  number;
  cursor c1 is
    select buffer_gets, substr(sql_text, 1, 4000)
      from v$sqlarea
     order by buffer_gets desc;
begin
  dbms_output.put_line('gets' || '     ' || 'text');
  dbms_output.put_line('--------' || ' ' || '---------------');
  open c1;
  for i in 1 .. 25 loop
    fetch c1
      into top25, text1;
    dbms_output.put_line(rpad(to_char(top25), 9) || ' ' ||
                         substr(text1, 1, 66));
    len1 := length(text1);
    x    := 66;
    while len1 > x - 1 loop
      dbms_output.put_line('"        ' || substr(text1, x, 66));
      x := x + 66;
    end loop;
  end loop;
end;
/

 

評估準則:

本部分沒有評估準則,需要開發人員或者dba去確認在這25個sql中屬于應用系統的語句是否都已經作過調優。

 

8. 固定緩存對象

嘗試在內存中固定(pin)經常使用的對象,包括表,存儲過程等。

檢索需要在共享池中要求大于100k連續空間的對象:

select *
  from v$db_object_cache
 where sharable_mem > 100000
   and type in ('package', 'package body', 'procedure', 'function');

 

考察返回的結果,確認是否需要pin到共享池中,返回結果中的kept字段如果是yes,那么表示該對象已經固定在了共享池中,為no,則表示還沒有固定。

如果需要固定,使用下面的語句:

exec dbms_shared_pool.keep('sys.standard');            

 

數據庫默認安裝的時候沒有創建dbms_shared_pool包,所以需要先創建該包。

cd $oracle_home/rdbms/admin

sqlplus “/ as sysdba”

@dbmspool.sql

 

如果我們要固定表,那么可以在創建表的時候或者修改表屬性時使用cache關鍵字,將表放置到buffer cache的lru列表的mru端。通常我們需要對于較小的但是頻繁使用的表進行這種操作。

alter table table_name cache;

我們也可以將需要頻繁使用的表放置到另外一個獨立的buffer cache中,比如keep池。這種操作可以使這些表的數據不至于很快被清除出default buffer cache。

alter table table_name storage (buffer pool keep);

 

評估準則:

本部分沒有評估準則,需要開發人員或者dba在系統分析以后謹慎執行。

 

二.存儲性能評估

三.statspack報表中需要首先查看的十項內容

 

 

本文參考:

oracle9i performance tuning tips & techniques - richard j.niemiec

oracle9i database concepts - tahiti.oracle.com

oracle9i database reference - tahiti.oracle.com

 

最大的網站源碼資源下載站,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永寿县| 分宜县| 奇台县| 遂溪县| 西宁市| 龙里县| 府谷县| 遂川县| 珲春市| 水富县| 武乡县| 林甸县| 交口县| 嘉荫县| 甘肃省| 奎屯市| 龙川县| 井冈山市| 莱芜市| 林口县| 和平县| 瑞丽市| 津市市| 盐池县| 五河县| 铜川市| 东台市| 桦川县| 武川县| 临西县| 北票市| 讷河市| 东城区| 台南市| 通渭县| 突泉县| 濮阳市| 沙坪坝区| 理塘县| 大城县| 通河县|