應用優化

 

1 使用連接池

 

對於訪問數據庫來說,建立連接的代價比較昂貴,因此,我們有必要建立"連接池"以提高訪問的性能。我們可以把連接當作對象或者設備,池中又有許多已經建立的連接,訪問本來需要與數據庫的連接的地方,都改爲和池相連,池臨時分配連接供訪問使用,結果返回後,訪問將連接交還。

 

 

2 減少對Mysql的訪問

 

1 避免對同一數據做重複檢索:

 

應用中需要理清楚對數據庫的訪問邏輯,需要對相同表的訪問,儘量集中在相同sql訪問,一次提取結果,減少對數據庫的重複訪問。

 

 

2 使用 mysql query cache

 

作用: 查詢緩存存儲SELECT查詢的文本以及發送給客戶端的相應結果。 如果隨後收到一個相同的查詢,服務器從查詢緩存中重新得到查詢結果,而不再需要解析和執行查詢。

適用範圍:不發生數據更新的表。當表更改(包括表結構和表數據)後,查詢緩存值的相關條目被清空。

SHOW STATUS 中,你可以監視查詢緩存的性能:

Qcache_queries_in_cache 在緩存中已註冊的查詢數目

Qcache_inserts 被加入到緩存中的查詢數目

Qcache_hits 緩存採樣數數目

Qcache_lowmem_prunes 因爲缺少內存而被從緩存中刪除的查詢數目

Qcache_not_cached 沒有被緩存的查詢數目 (不能被緩存的,或由於QUERY_CACHE_TYPE)

Qcache_free_memory 查詢緩存的空閒內存總數

Qcache_free_blocks 查詢緩存中的空閒內存塊的數目

Qcache_total_blocks 查詢緩存中的塊的總數目

 

 

 

3 cache層:

 

Cache( 高速緩存)、 Memory( 內存)、 Hard disk( 硬盤) 都是數據存取單元, 但存取速度卻有很大差異, 呈依次遞減的順序。對於CPU來說,它可以從距離自己最近的Cache高速地存取數據,而不是從內存和硬盤以低幾個數量級的速度來存取數據。而Cache中所存儲的數據,往往是CPU要反覆存取的數據,有特定的機制(或程序)來保證Cache內數據的命中率( Hit Rate) 。因此, CPU存取數據的速度在應用高速緩存後得到了巨大的提高。因爲將數據寫入高速緩存的任務由Cache Manager負責,所以對用戶來說高速緩存的內容肯定是隻讀的。需要你做的工作很少,程序中的SQL語句和直接訪問DBMS時沒有分別,返回的結果也看不出有什麼差別。而數據庫廠商往往會在DB Server的配置文件中提供與Cache相關的參數,通過修改它們,可針對我們的應用優化Cache的管理。

 

 

 

3 負載均衡

 

1 利用 mysql 複製分流查詢操作:

 

利用mysql的主從複製可以有效的分流更新操作和查詢操作,具體的實現是一個主服務器,承擔更新操作,多臺從服務器,承擔查詢操作,主從之間通過複製實現數據的同步。

多臺從服務器一方面用來確保可用性,一方面可以創建不同的索引滿足不同查詢的需要。對於主從之間不需要複製全部表的情況,可以通過在主的服務器上搭建一個虛擬的從服務器, 將需要複製到從服務器的表設置成blackhole引擎, 然後定義replicate-do-table參數只複製這些表,這樣就過濾出需要複製的binlog,減少了傳輸binlog的帶寬。因爲搭建的虛擬的從服務器只起到過濾binlog的作用,並沒有實際紀錄任何數據,所以對主數據庫服務器的性能影響也非常的有限。

通過複製分流查詢的存在的問題是主數據庫上更新頻繁或者網絡出現問題的時候,主從之間的數據可能存在差異,造成查詢結果的異議,應用在設計的時候需要有所考慮。

 

 

 

2 採用分佈式數據庫架構:

 

mysql5.0.3開始支持分佈式事務,當前分佈式事務只對Innodb存儲引擎支持。分佈式的數據庫架構適合大數據量,負載高的情況,有良好的擴展性和高可用性。通過在多臺服務器之間分佈數據實現在多臺服務器之間的負載平均, 提高了訪問的執行效率。 具體實現的時候, 可以使用mysqlCluster功能( NDB引擎) 或者自己編寫程序來實現全局事務。

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