zz網站性能優化實踐-數據庫分頁和輕量級Session

核桃博客 轉載,http://www.hetaoblog.com/?p=19

網站性能優化實踐-數據庫分頁和輕量級Session

 

 

 

情況:

某網站,數據量較小,最大的表也不過3萬條記錄,可是在一臺雖然較差服務器上跑的時候,用工具測試,20個併發訪問的時候居然出現了1分多鐘的響應時間。

問題:

1.分頁在應用層完成:

查看代碼發現,雖然頁面上每個頁面顯示50條記錄,可是程序把數據庫裏面的全表記錄【少至5000條,多至30000條】都取出來放到應用服務器內存裏面,然後在內存中排序,並根據邏輯做了一些複製之類的操作,然後取出其中50條,最後顯示在頁面上。

2.將所有未分頁數據保存在用戶Session中

分析:

下圖是數據庫操作的基本過程,

我們可以看到,如果我們要將表格中的所有記錄取出來,就需要數據塊,這是一個非常慢的硬盤IO操作;另外,返回結果是一個網絡IO操作,將所有數據都返回到應用服務器。在數據庫端不做分頁,極大在增加了磁盤IO的操作和網絡IO的工作量,大大的降低了應用的性能。

另外一個方面,由於將幾萬條記錄的內容放到用戶的Session中,20個併發用戶,就幾乎將服務器的內存耗盡。

解決方法:

比較簡單,改造SQL語句,使用oracle的rownum或者mysql的limit關鍵字,將符合要求的50條記錄取出來,只將這50條記錄放 到用戶Session中,一方面極大的減輕了數據庫磁盤IO操作和網絡傳輸IO操作,另外一個方面節省了大量內存,經過改進,系統在同樣硬件條件下,同樣 的壓力測試中,響應時間減少到10s以下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章