效能問題解決案例01——sybase資料庫記憶體問題

來源:互聯網
上載者:User

    最近現場反饋問題,所有電子簽章頁面打不開文書(pdf格式),後台日誌沒報任何錯誤,效果就是空白:

    1、首先想到是簽章的ocx控制項問題,檢查ocx控制項安裝,發現其他電腦也打不開文書,測試頁面可以直接開啟pdf文檔,排除控制項的問題。

    2、懷疑是文書下載出問題了,檢查文書下載功能,我們是把pdf文書下載到本地“我的文件”目錄中,然後使用ocx控制項開啟文書,檢查發現有的文書能正常下載到本地,有的乾脆不下載,能下載到本地的文書可以正常開啟。檢查ftp發現文書都沒問題,定位問題就出在從ftp下載這塊。

    3、ftp下載有2步,先去資料庫中查詢到ccbh,再根據ccbh從ftp下載,檢查發現下載沒問題,查詢ccbh非常慢,最快也要50s才能查詢出來,慢的要4、5分鐘,有耐心的話,等待幾分鐘,文書是可以展示,已經定位到問題原因了,查詢ccbh的sql執行非常慢。

    4、分析sql,簡化後sql為:

SELECT * FROM T_ZXLD_SYYH_FJWHERE C_BH_SQ='76A1737D773BE344B7154AA479634FED'AND C_FJLX='syyhcx.zz.cxs.gy'

    查詢條件中C_BH_SQ是有索引的,理論上不應該這麼慢呀,查看執行計畫發現:

    

    竟然沒有用到索引,執行時間是274s。有索引卻沒用到,而且C_BH_SQ這個欄位是主表主鍵,被選中機率應該非常高,懷疑是統計資訊出問題了,使用

UPDATE all STATISTICS T_ZXLD_SYYH_FJ

    更新統計資料,更新後執行原始sql,用了0.12s,執行計畫也顯示出使用了索引

    

    問題看似解決了,但是偶爾還會出現開啟非常慢(快的10s左右,慢的幾分鐘)的情況,怎麼回事呢?檢查過程中發現不僅僅這個頁面偶爾慢,很多頁面都偶爾非常慢,第一次開啟慢,後續就很快了,等一會再開啟又慢了。

    查看p6spy日誌發現(深顏色列是sql執行時間,只記錄了執行2s以上的sql),把執行時間長的sql拿出來單獨執行,很多第一次執行幾十秒,第二次執行不到1s,可以確定問題原因了,系統記憶體較小。

    

    sybase資料可以使用下面命令查看io情況:SET STATISTICS io ON|OFF

    

    第一次執行結果:

    

    第二次執行結果:

    

    可以看到第一次從磁碟和記憶體都讀取了內容,第二次physical reads是0,完全從記憶體讀取當然查詢快了,記憶體較小的話,其他查詢資料讀進記憶體後,把舊的資料從記憶體中清除,再查詢舊資料還需要從磁碟讀取到記憶體,所以經常出現第一次較慢,後續較快情況。最好辦法就是加大記憶體,把常用的資料都讀取到記憶體中緩衝起來。

    解決辦法建議現場升級sybase到15.7,因為sybase12.5.3沒有64位版本,32位最多使用記憶體2G,好多表都是上百萬的資料,確實查詢較慢。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.