欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Informix 性能調優(yōu)案例講解

Informix 性能調優(yōu)案例講解

牛新莊 (niuxinzhuang.zh@ccb.com), 博士,IBM 官方高級培訓講師, 自由著(zhù)者

2008 年 10 月 21 日

在實(shí)際的生產(chǎn)運行環(huán)境中,筆者在國內很多客戶(hù)現場(chǎng)都看到開(kāi)發(fā)人員和系統管理人員遇到很多有關(guān)于 Informix 數據庫引起的性能問(wèn)題,進(jìn)而被多次問(wèn)起如何進(jìn)行 Informix 數據庫性能調優(yōu),筆者根據自己在工作中對 Informix 數據庫的使用經(jīng)驗積累寫(xiě)下這篇文章。

概述

在實(shí)際的生產(chǎn)運行環(huán)境中,筆者在國內很多客戶(hù)現場(chǎng)都看到開(kāi)發(fā)人員和系統管理人員遇到很多有關(guān)于 Informix 數據庫引起的性能問(wèn)題,進(jìn)而被多次問(wèn)起如何進(jìn)行 Informix 數據庫性能調優(yōu),筆者根據自己在工作中對 Informix 數據庫的使用經(jīng)驗積累寫(xiě)下這篇文章。





回頁(yè)首


性能優(yōu)化原則

包括:

  • 性能規劃:深入了解應用與數據庫的交互特征,確立良好的設計、開(kāi)發(fā)、測試迭代過(guò)程,上線(xiàn)前消除模型上的性能瓶頸。
  • 實(shí)例調優(yōu):建立性能基準,對比調節數據庫、操作系統、存儲、網(wǎng)絡(luò )等的配置,主動(dòng)監控、消除瓶頸。
  • SQL 調優(yōu):書(shū)寫(xiě)高效 SQL,優(yōu)化相關(guān)數據庫對象,充分借助優(yōu)化器,確定最佳執行計劃。




回頁(yè)首


性能優(yōu)化流程

  1. 首先執行下面的初始檢查:
    • 獲取直接用戶(hù)的使用反饋,確定性能目標和范圍。
    • 獲取性能表現好與壞時(shí)的操作系統、數據庫、應用統計信息。
    • 對數據庫做一次全面健康檢查。
  2. 根據收集的信息,以及對應用特性的了解,構建性能概念模型,明確性能瓶頸所在,以及導致性能的根本原因。
    • 首先應該排除操作系統、硬件資源造成的瓶頸。
    • 然后針對數據庫系統性能進(jìn)行分析
    • 必要時(shí),還需要檢查應用日志,因為系統性能問(wèn)題也可能由于應用非 SQL 部分造成瓶頸。
  3. 提出一系列針對的優(yōu)化措施,并根據它們對性能改善的重要程度排序,然后逐一加以實(shí)施。不要一次執行所有的優(yōu)化措施,必須逐條嘗試,逐步對比。
  4. 通過(guò)獲取直接用戶(hù)的反饋驗證調節是否已經(jīng)產(chǎn)生預期的效果,否則,需要重新提煉性能概念模型,直到對應用特性了解進(jìn)一步準確。
  5. 重復上述,直到性能達到目標或由于客觀(guān)約束無(wú)法進(jìn)一步優(yōu)化。

當從操作系統層面判斷系統存在瓶頸并且是數據庫引起的,那么可以從下面的流程圖來(lái)解決


圖 1. 性能診斷優(yōu)化流程

(點(diǎn)擊查看大圖)





回頁(yè)首


典型性能問(wèn)題案例

案例 1:數據庫應用突然變慢

問(wèn)題特征

數據庫應用突然變慢,查看系統信息,發(fā)現 CPU 空閑突然很低,IO 性能沒(méi)有明顯惡化。

處理步驟

首先,需要排除操作系統上其他應用程序的問(wèn)題。通過(guò) top(HP)/topas(AIX/Linux) 命令可以看到當前占用 CPU 資源最多的進(jìn)程,確認是 oninit 進(jìn)程。Solaris 上默認沒(méi)有 top 命令,可以通過(guò) /usr/ucb/ps –aux | more 的方式來(lái)查看,該輸出是根據 CPU 占用情況來(lái)排序的。

數據庫進(jìn)程占用了大量 CPU 資源時(shí),往往是在對大表在做全表掃描。通過(guò) 4.1 中的辦法初步確認問(wèn)題 SQL 后,如果是條件查詢(xún) SQL,如帶 WHERE 條件的 SELECT /UPDATE /DELETE,還可以通過(guò)得到具體的 SQL 查詢(xún)計劃來(lái)確認是在進(jìn)行全表掃描。此時(shí)需要對比 dbschema 得到的建表腳本,看是否建立了相應的索引,如果沒(méi)有合適的索引,應該創(chuàng )建;如果應用沒(méi)有合理應用已有索引,應該考慮修改應用 SQL。如果表上有合適的索引,應用 SQL 也沒(méi)有問(wèn)題,那么就有可能是由于表中數據已經(jīng)變化較大而長(cháng)時(shí)間未對表收集統計信息,造成數據庫引擎選擇了錯誤的查詢(xún)計劃。此時(shí)應該對該表收集統計信息后,通??梢允盏搅己玫男Ч?。

有時(shí)候問(wèn)題 SQL 還會(huì )是 INSERT 語(yǔ)句,此時(shí)通常需要查看表的建表腳本,看看表上是否有過(guò)多的索引,是否該表上有不適當的外鍵指向另一個(gè)大表,也可以通過(guò)適當刪除表中的記錄來(lái)實(shí)現優(yōu)化。

易出現時(shí)機

新應用 / 新模塊投入運行

案例 2:檢查點(diǎn)持續時(shí)間突然顯著(zhù)增加

問(wèn)題特征

數據庫應用突然變慢,查看系統信息,發(fā)現 CPU 空閑突然很低,IO 性能明顯惡化。和問(wèn)題 1 的顯著(zhù)不同在于,此時(shí) IO 惡化現象非常明顯。

Vmstat 顯示 b(block) 很大,有很多等待 IO 的進(jìn)程, sar 顯示 wio 明顯超過(guò)平時(shí)值。觀(guān)察數據庫日志,發(fā)現數據庫檢查點(diǎn)持續時(shí)間 (checkpoint duration time) 顯著(zhù)增加,平時(shí)在 3 秒以?xún)染湍芡瓿?,此時(shí)需要 10 秒甚至更長(cháng)時(shí)間才能完成。

處理步驟

首先還是查看數據庫日志和操作系統日志,排除數據庫內部錯誤和操作系統 IO 錯誤。如果用的是陣列 (RAID),最好再查看一下陣列的日志,出現這種情況最常見(jiàn)的原因是陣列出了問(wèn)題,比如電池沒(méi)電,cache 沒(méi)有打開(kāi)等等。

排除了操作系統和數據庫內部錯誤,就需要了解一下是否有新的應用在進(jìn)行大批量的數據操作,如 INSERT/DELETE/UPDATE,是否能將這些操作放在系統相對空閑的時(shí)候進(jìn)行。對于大批量的數據導入操作,在 INFORMIX9.4 中提供了 RAW 類(lèi)型的表,由于不記錄邏輯日志,插入速度會(huì )快很多,導入完成后,再將表修改為正常模式;對普通表應該先導入數據,再創(chuàng )建索引,注意主鍵、外鍵默認都會(huì )創(chuàng )建索引,應該在數據導入后在創(chuàng )建。

不恰當的應用 SQL 也會(huì )導致 IO 量非常大,可以用案例 1 中的辦法來(lái)找到問(wèn)題 SQL,根據實(shí)際情況進(jìn)行處理。

易出現時(shí)機

案例 3:檢查點(diǎn)持續時(shí)間逐漸緩慢增加

問(wèn)題特征

數據庫穩定運行一段時(shí)間后,性能開(kāi)始下降,檢查點(diǎn)持續時(shí)間 (checkpoint duration time) 開(kāi)始逐漸增加,系統 CPU 空閑降低,WIO 有所增加。這些情況往往出現在新的應用上線(xiàn)后一段時(shí)間,由于在開(kāi)發(fā)和測試環(huán)境中數據量小,性能問(wèn)題不會(huì )暴露,當生產(chǎn)環(huán)境數據量增長(cháng)到一定程度后,性能問(wèn)題就會(huì )出現。

針對這種情況,需要確認定期在對數據庫,尤其是對數據庫中的大表,在定期做收集統計數據的工作 (update statistics),避免數據量的增大造成系統性能急劇下降。

利用 4.2 中描述的辦法找到被順序掃描多次的大表及其上的問(wèn)題 SQL,進(jìn)行分析,采取相應辦法嘗試減少其上的順序掃描:

  • 創(chuàng )建相應索引;
  • 修改應用 SQL;
  • 及時(shí)刪除表中不必要的數據。




回頁(yè)首


常見(jiàn)調優(yōu)技巧

找到 CPU 占用最高的 SQL

1. 在 sysmaster 庫中執行

select sqx_estcost,                        sqx_sqlstatement                        from syssqexplain                        order by sqx_estcost desc                        

注意:此時(shí)看到的僅僅是當前正在執行的 SQL

需要多看幾次

2. onstat 命令

onstat -g act 得到當前正在執行的 SQL

Running threads:                        tid tcb rstcb prty status vp-class name                        75 a327318 a14d6b4 2 cond wait(sm_read) 1cpu sqlexec                        76 a327b40 a14d280 2 yield lockwait 1cpu sqlexec                        

根據 rstcb 列(不要包括前面的 C0000 等,僅要后面部分)

onstat -u | grep a14d6b4

從第三列 sessid 得到 session id

onstat -g sql <sessid> 即可得到當時(shí)正在執行的 SQL

一般多找幾個(gè) threads 后,就基本可以確定問(wèn)題 SQL

3. 示例

onstat –g act                        Threads:                        tid tcb rstcb prty status vp-class name                        141904 84176538 8030eab8 2 running 1cpu sqlexec                        onstat –u | grep 8030eab8                        Userthreads                        address flags sessid user tty wait tout locks nreads nwrites                        8030eab8 Y--P--- 131047 informix - 84022480 0 1 11671 14722                        onstat –g sql 131047                        Sess SQL Current Iso Lock SQL ISAM F.E.                        Id Stmt type Database Lvl Mode ERR ERR Vers                        131047 DELETE (all) testdb DR Wait 10 0 0 9.03                        Current SQL statement :                        delete from my_tab                        Last parsed SQL statement :                        delete from my_tab                        

得到 SQL 后,利用 set explain on 分析其查詢(xún)路徑,

看是否未利用索引,在對大表進(jìn)行全表掃描

根據需要創(chuàng )建相應索引

找到全表掃描較多的表及其 SQL

1. 得到全表掃描較多的表

  cat <<! > check.sql                        -- 系統順序掃描較多時(shí),被多次順序掃描的大表,如果有,應該考慮增加索引                        select first 5 substr(t.tabname,0,20) tabname,substr(dbsname,0,10) dbname,                        nrows*rowsize*p.seqscans costs,                        substr(p.seqscans,0,8) seqscans,substr(nrows,0,8) nrows                        from sysmaster:sysptprof p , systables t,sysmaster:sysprofile s                        where p.tabname = t.tabname                        and p.seqscans > s.value/50                        and s.name = 'seqscans'                        --and s.value > 2000000                        and nrows > 2000                        order by 3 desc                        !                        dbaccess sysmaster <<!                        unload to /tmp/db delimiter ';'                        select 'dbaccess '||trim(name)||' check.sql' from sysdatabases                        where name not like 'sys%'                        !                        ksh /tmp/db                        

2. 利用 onstat –g ses 0 –r 5/ onstat –g stm 的輸出信息,根據表名,找到可能的 SQL 語(yǔ)句。由于以上獲取 SQL 的辦法是有局限的,如果無(wú)法獲取,建議通過(guò)查看應用日志或聯(lián)系開(kāi)發(fā)人員查看源代碼的方式來(lái)找到。

3. 利用 set explain on 分析其查詢(xún)路徑,確認是在對表進(jìn)行全表掃描,根據需要創(chuàng )建相應索引。





回頁(yè)首


免責聲明和公開(kāi)聲明


本文所述觀(guān)點(diǎn)是基于作者個(gè)人對相關(guān)產(chǎn)品的理解,并不代表 IBM 的官方觀(guān)點(diǎn),IBM 不對本文中的信息負責。



參考資料



關(guān)于作者

 

牛新莊博士是 IBM 官方高級培訓講師,于 2002 年獲 IBM 杰出軟件專(zhuān)家獎,于 2006 年獲得“首屆中國杰出數據庫工程師獎”,獲得“2006 年 IT168 技術(shù)卓越獎”,是中國建設銀行總行外聘資深技術(shù)專(zhuān)家,是中信銀行,山東農信等公司的資深技術(shù)顧問(wèn),他擁有 OCP,AIX,DB2,HP-UX,MQ,CICS 和 WebSphere 等二十多項國際認證。曾經(jīng)幫助工農商建招交六大行、上海移動(dòng)、青島海爾、云南紅塔、江蘇電力公司等公司做過(guò)問(wèn)題診斷、性能調優(yōu)和技術(shù)支持,他經(jīng)常往返于國內大中城市解決數據庫技術(shù)難題,有著(zhù)豐富的理論和實(shí)踐經(jīng)驗。他擁有 DB2 V5/V6 ,V7,V8,V9 所有 DB2 認證,是國內擁有DB2 認證最多的 DBA。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
INFORMIX數據庫常用命令(未分析)
informix命令集
Informix on aix手冊
Informix 數據庫優(yōu)化
58到家數據庫30條軍規解讀
面向程序員的數據庫訪(fǎng)問(wèn)性能優(yōu)化法則
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久