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

首頁 > 開發(fā) > 綜合 > 正文

數(shù)據(jù)庫性能檢查指導(dǎo)方案 - Part II

2024-07-21 02:07:08
字體:
供稿:網(wǎng)友

    存儲性能評估

在存儲性能評估的時候,我們使用磁盤性能指數(shù)(dpi, disk performance index),下表列出了dpi中的各項指數(shù),這個評分系統(tǒng)并不意味著對磁盤的使用和分配的全方位評估,而只是代表一個晴雨表,反映當(dāng)前磁盤的使用和分配上是否存在需要改進或者注意的地方。

 

mpi指數(shù)

分類

所需等級

最高分

調(diào)整表和索引



30

表的行連接問題



30

分離關(guān)鍵的oracle文件



30

回滾段的平衡

 

30

臨時段的平衡

 

30

使用最多的前10個sql的磁盤使用率

<5%

60

是否已經(jīng)調(diào)整使用磁盤最多的前25個sql



40

mpi指數(shù)

總分

250

 

1. 調(diào)整表和索引

由于表和索引的數(shù)據(jù)塊通常是被同時讀取的,所以應(yīng)該盡量將表和其相關(guān)聯(lián)的索引放置在不同的磁盤上,以便減少文件的i/o沖突。

 

檢查方法:

select i.index_name, t.table_name, t.tablespace_name
  from user_tables t, user_indexes i
 where t.table_name = i.table_name
   and t.tablespace_name = i.tablespace_name;

 

返回結(jié)果是創(chuàng)建在相同表空間中的表和相關(guān)聯(lián)的索引。建議創(chuàng)建新的表空間用于專門存放索引,并將當(dāng)前的索引rebuild到新創(chuàng)建的表空間中。

alter index idx_name rebuild tablespace ts_name;

評估準則:

等級

分數(shù)

表和索引放在同一磁盤上

0

存儲使用了磁盤陣列,沒有進一步調(diào)整

20

存儲使用了磁盤陣列,對于raid類型已經(jīng)作過調(diào)整

30

表和索引已經(jīng)規(guī)劃在不同磁盤上

30

 

2. 表的行鏈接問題

當(dāng)更新一張表,而數(shù)據(jù)塊中又沒有足夠的剩余空間來容納所作的修改時,就會發(fā)生“行鏈接”現(xiàn)象,該記錄被鏈接到另外一個有足夠空間的數(shù)據(jù)塊中,也就是一條記錄跨越了多個數(shù)據(jù)塊,這樣在讀取該記錄的時候就會消耗更多的i/o,當(dāng)數(shù)據(jù)庫中有大量的“行鏈接”現(xiàn)象存在時,數(shù)據(jù)庫的整體性能就會下降。

 

檢查方法:

sqlplus /nolog

connect app_user/password

sql> @$oracle_home/rdbms/admin/utlchain.sql

sql> analyze table <table_name> list chained rows;

sql> select count(*) chained_rows, table_name
  from chained_rows
 group by table_name;

 

如果沒有返回任何行,則表示沒有“行鏈接”現(xiàn)象。否則將按照已經(jīng)分析過的表顯示每張表中有多少記錄出現(xiàn)了“行鏈接”現(xiàn)象。

“行鏈接”現(xiàn)象的產(chǎn)生跟pctfree參數(shù)的設(shè)置不當(dāng)有關(guān)系。pctfree值默認為10%,如果系統(tǒng)中存在大量行鏈接,表示這個參數(shù)指定的塊保留空間過小,不足以容納塊中所有記錄的更新操作。此時應(yīng)該增大相應(yīng)表的pctfree值。

 

評估準則:

等級

分數(shù)

存在行鏈接現(xiàn)象

0

不存在行鏈接現(xiàn)象

30

 

3. 分離關(guān)鍵的oracle文件

無論是出于安全性的考慮還是性能的考慮,都建議將關(guān)鍵的oracle文件分布在可用的獨立磁盤上。

首先在錯誤出現(xiàn)之后,用來被恢復(fù)的數(shù)據(jù)文件和用來恢復(fù)的控制文件,重作日志文件,歸檔日志文件應(yīng)該分離存放。如果有可能,將下列各個關(guān)鍵文件分布在不同的磁盤上。

系統(tǒng)表空間(system),臨時表空間(temp),回滾表空間(undo),聯(lián)機重作日志文件(redo)和歸檔日志文件(arch),經(jīng)常訪問的用戶表空間,經(jīng)常訪問的用戶索引表空間,操作系統(tǒng)盤,$oracl_ebase中的關(guān)鍵oracle軟件文件。

至少聯(lián)機重作日志文件(redo)和歸檔日志文件(arch)應(yīng)該跟其它文件存放在不同的磁盤上,并且由于日志文件的大部分時間為只寫屬性,所以需要考慮raid5在寫方面的弱勢,盡量不要將日志文件存放在raid5的陣列組上。

 

檢查方法:

select file_name, tablespace_name, bytes
  from dba_data_files
union all
select file_name, tablespace_name, bytes
  from dba_temp_files
union all
select name file_name, null, null
  from v$controlfile
union all
select member file_name, to_char(a.group#) tablespace_name, b.bytes bytes
  from v$logfile a, v$log b
 where a.group# = b.group#
union all (select value file_name, null, null
             from v$parameter
            where name like 'log_archive_dest_%'
              and value is not null
           minus
           select value file_name, null, null
             from v$parameter
            where name like 'log_archive_dest_state%');

 

返回數(shù)據(jù)庫中所有關(guān)鍵文件存儲的位置,由dba和sa考察返回的結(jié)果,確認已經(jīng)對于關(guān)鍵文件的存儲位置作過符合實際情況的調(diào)整。

 

評估準則:

等級

分數(shù)

沒有調(diào)整,全部在單個磁盤上

0

沒有調(diào)整,全部在raid上

20

已經(jīng)調(diào)整

30

 

4. 回滾段的平衡

在oracle 9i和oracle9i之前如果沒有使用回滾段自動管理,那么對于回滾段的性能仍然是需要監(jiān)控并且調(diào)整的。

 

檢查是否使用了回滾段自動管理:

select name, value from v$parameter where name like '%undo_%';

 

如果返回結(jié)果中undo_management的值是auto,則表示使用了回滾段自動管理,同時undo_tablespace值顯示了自動管理使用的回滾表空間,undo_retention值顯示了在回滾表空間中保留回滾數(shù)據(jù)的時限,以秒為單位。

注意:如果undo_management的值是auto但是undo_tablespace沒有設(shè)置相應(yīng)的值,那么就會使用system表空間中的system回滾段,這個是絕對應(yīng)該避免的現(xiàn)象。

 

如果沒有使用回滾段自動管理,那么需要監(jiān)控用戶使用回滾段的頻度,原則上認為不應(yīng)該有超過1個用戶同時使用1個回滾段。

 

檢查方法:

select a.name,
       b.extents,
       b.rssize,
       b.xacts,
       b.waits,
       b.gets,
       optsize,
       status
  from v$rollname a, v$rollstat b
 where a.usn = b.usn;

 

檢查輸出結(jié)果,對于所有回滾段而言,如果xacts(活動事務(wù))和waits(段頭等待)經(jīng)常超出1,那么就表明需要增加回滾段數(shù)目,以避免可能出現(xiàn)的爭用。

增加回滾段的方法:

create rollback segment rs_name tablespace rbs storage(initial 1m next 2m);
alter rollback segment rs_name online;

 

如果使用了回滾段自動管理,那么可以從v$undostat, v$rollstat, dba_undo_extents等視圖中查詢當(dāng)前回滾段的使用和分配情況。

 

評估準則:

等級

分數(shù)

有回滾段等待現(xiàn)象

0

無回滾段等待現(xiàn)象

30

使用了回滾段自動管理

30

 

5. 臨時段的平衡

當(dāng)初始化參數(shù)中定義的sort_area_size大小無法滿足排序要求的空間,就會使用臨時表空間中的臨時段進行排序,磁盤排序比內(nèi)存排序要慢100-10000倍,所以盡量減少磁盤排序是性能調(diào)整工作的一個重要部分。

可能引起排序的操作有create index, distinct, order by, group by等。

 

檢查方法:

select name, value from v$sysstat where name like '%sorts%';

 

返回結(jié)果中的sorts (memory)表示內(nèi)存排序,而sorts (disk)則表示磁盤排序,如果存在大量的磁盤排序,則表明我們需要增加sort_area_size或者hash_area_size等排序區(qū)的大小,或者需要檢查目前系統(tǒng)中消耗大量磁盤的sql是否已經(jīng)經(jīng)過調(diào)整(檢查前25位消耗磁盤的sql在后面部分將提到)。

 

檢查使用磁盤排序的會話信息,可以定位執(zhí)行了大量磁盤排序的會話。

檢查方法:

select b.name, a.sid, a.value
  from v$sesstat a, v$statname b
 where a.statistic# = b.statistic#
   and b.name = 'sorts (disk)'
   and a.value > 0
 order by a.value desc;

如果有可能我們應(yīng)該將臨時表空間中的多個臨時數(shù)據(jù)文件分布在不同的磁盤上,以減少排序時可能會產(chǎn)生的磁盤沖突。

在oracle9i中,我們可以設(shè)置pga_aggregate_size初始化參數(shù)來指定所有會話將使用的pga大小,同時也必須設(shè)置workarea_size_policy參數(shù)為auto。其它詳細信息見內(nèi)存性能評估中“4。內(nèi)存中的排序”部分。

 

評估準則:

等級

分數(shù)

對于存在的磁盤排序沒有評估

0

已經(jīng)就存在的磁盤排序進行過調(diào)整

30

 

6. 最浪費磁盤讀操作的前10個語句占所有語句的比例

通常一個沒有優(yōu)化系統(tǒng)中,10個最常用的sql語句的訪問量會占到整個系統(tǒng)中磁盤讀操作的50%以上。這些sql是最需要進行優(yōu)化的部分,也是優(yōu)化工作中優(yōu)先級很高的部分。通常我們的優(yōu)化目標是將這些sql的磁盤讀操作百分比降低到5-19%。

 

檢查方法:

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

 

評估準則:

等級

分數(shù)

<5%

60

5-19%

50

20-25%

30

>25%

0

 

7. 調(diào)整前25個最浪費磁盤讀操作的語句

在沒有調(diào)整的情況下,絕大多數(shù)系統(tǒng)中,訪問量占前25位的語句的磁盤讀操作將占用整個系統(tǒng)所有磁盤讀操作的75%,對這部分語句進行調(diào)整是至關(guān)重要的。這部分腳本用于獲得訪問量占前25位的sql語句。輸出結(jié)果中的exec表示該sql被執(zhí)行的次數(shù)。

 

檢查方法:

set serveroutput on size 1000000
declare
  execution number;
  top25     number;
  text1     varchar2(4000);
  x         number;
  len1      number;
  cursor c1 is
    select executions, disk_reads, substr(sql_text, 1, 4000)
      from v$sqlarea
     order by disk_reads desc;
begin
  dbms_output.put_line('exec' || '  ' || 'reads' || '      ' || 'text');
  dbms_output.put_line('-----' || ' ' || '--------' || ' ' ||
                       '-------------');
  open c1;
  for i in 1 .. 25 loop
    fetch c1
      into execution, top25, text1;
    dbms_output.put_line(rpad(to_char(execution), 5) || ' ' ||
                         rpad(to_char(top25), 8) || ' ' ||
                         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;
/

 

評估準則:

本部分沒有具體的評估準則,需要開發(fā)人員或者dba去確認在這25個sql中屬于應(yīng)用系統(tǒng)的語句是否都已經(jīng)作過調(diào)優(yōu)。

 

8. 其它存儲相關(guān)的調(diào)整

1)      字典管理表空間中的extent總數(shù)不超過4096

檢查方法:

select a.tablespace_name, sum(a.extents)
  from dba_segments a, dba_tablespaces b
 where a.tablespace_name = b.tablespace_name
   and b.extent_management = 'dictionary'
 group by a.tablespace_name
 order by sum(a.extents);

 

檢查輸出結(jié)果,如果顯示某個表空間中的extents總數(shù)超過了4096,那么需要擴大這個表空間的extent大小,過多的extent對于dmt的空間管理有負面影響。

 

2)      本地管理表空間中單個segement的extent數(shù)不超過1024

檢查方法:

select segment_name, segment_type, extents, bytes, b.tablespace_name
  from dba_segments a, dba_tablespaces b
 where a.tablespace_name = b.tablespace_name
   and b.extent_management = 'local'
   and a.extents > 1024;

 

檢查輸出結(jié)果,返回的記錄都是單個段的區(qū)間大于1024的對象,對于這些對象,應(yīng)該創(chuàng)建一個單獨的具有更大extent大小的表空間,然后將這些對象move到新的表空間中去。

 

3)      檢查字典管理表空間的pctincrease值是否是0

為了表空間中的所有extent大小相同,建議表空間中的所有段都不要設(shè)置獨立的storage參數(shù)。對于表空間的pctincrease參數(shù),建議設(shè)置為0,同時應(yīng)該設(shè)置minextents參數(shù),保證初始分配足夠的空間給新創(chuàng)建的對象。

對于lmt表空間,storage參數(shù)中的pctincrease和next參數(shù)均無效,建議設(shè)置適當(dāng)?shù)膗niform參數(shù)管理表空間的extent分配。

 

4)      考慮使用分區(qū)來避免磁盤爭用

分區(qū)表在管理的方便性和性能的提高上都有較強的實用性,甚至可以認為分區(qū)是提高與大型表有關(guān)的性能的最佳方法。通過訪問一個表或者索引的較小片段,而不是訪問整個表或索引,分區(qū)可以很好地提高效率。如果一個表或者索引的分區(qū)位于不同的磁盤上,就更可以大大增加數(shù)據(jù)吞吐量,獲得很好的數(shù)據(jù)庫性能。

對于分區(qū)的使用,暫時不在本文的敘述范圍內(nèi),請參閱其它的分區(qū)文檔。

 

5)      對于分區(qū)表的非分區(qū)鍵索引是否是全局分區(qū)索引

由于分區(qū)表的數(shù)據(jù)量通常比較巨大,所以如果在分區(qū)表的非分區(qū)鍵上創(chuàng)建索引,那么建議創(chuàng)建為全局分區(qū)索引,這樣能夠更好地提高性能。注意:如果截斷了一個分區(qū)的數(shù)據(jù)或者刪除了一個分區(qū),那么必須rebuild這個分區(qū)表中的全部全局索引,否則這些全局索引將處于invalid狀態(tài),導(dǎo)致使用到這些索引的sql語句失敗。
中國最大的web開發(fā)資源網(wǎng)站及技術(shù)社區(qū),
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 上饶县| 灌南县| 温泉县| 阿合奇县| 永嘉县| 黑山县| 伊川县| SHOW| 刚察县| 抚松县| 江川县| 南阳市| 凭祥市| 汤阴县| 佳木斯市| 元谋县| 长武县| 松江区| 色达县| 四平市| 青海省| 衡水市| 黎平县| 桃园市| 张北县| 濉溪县| 桃江县| 宽城| 思南县| 开江县| 淳安县| 包头市| 神池县| 马边| 石河子市| 赫章县| 剑河县| 安岳县| 仁怀市| 湘潭市| 天台县|