日誌表設計優化與實現

摘要

這篇文章從日誌表問題引入、日誌表的共有特性、日誌表的設計需求、設計思路以及設計詳細實現的角度,闡述了在SQL Server數據庫中如何最優化設計日誌表來降低系統資源的佔用和提高系統吞吐量。

問題引入

在平時與客戶服務與交流過程中,我們不止一次的被客人問及這樣的場景:我們現在面臨如何設計SQL Server日誌表方案,如何最優化設計數據庫日誌記錄表。因爲,日誌表設計會面對如下問題:

表記錄數大:日誌表由於記錄了應用程序的很多操作日誌,有的業務有很多步驟,甚至每個步驟操作都會被記錄到日誌表中,所以通常日誌記錄表都很大,表記錄數據很多,表空間佔用很大。

事務操作頻繁:由於日誌記錄表寫入(INSERT)操作非常頻繁,加之表變得很大,通常的做法是會刪除過期的日誌信息(DELETE),所以事務操作非常頻繁。

佔用了昂貴的IOPS資源:日誌表原本寫入操作就非常頻繁了,加之需要刪除過時數據操作,這一寫一刪操作,使得事務量加倍,導致了數據庫系統IOPS資源的過度被日誌表的操作所佔用了。

吞吐量上不去:日誌表事務操作頻繁,如果刪除操作的事務沒有控制好(比如:我見過很多客人一個DELETE語句下去刪掉幾十、幾百萬記錄數的操作),很有可能會導致鎖等待的發生(Blocking),從而影響應用的吞吐量和併發能能力。

日誌表設計面臨的這一系列問題給我們設計帶來了不小的挑戰,而我們今天這篇文章就是要解決日誌表設計面臨的這些問題。這篇文章將會分享SQL Server日誌表設計的優化方案以及方案的實現細節,聰明的你甚至可以將這個設計方案推廣到其他的關係型數據庫。

日誌表特性

首先,在分享設計方案之前,我們來看看關係型數據中的日誌表,具有哪些共同的特性:

事務特性

日誌表最爲明顯的特性是事務特性,或者稱之爲最重要的特性也不爲過,即:寫多讀少,再準確一點說,是INSERT或者DELETE操作多;SELECT或者UPDATE操作少,這個很好理解。

INSERT操作:INSERT操作是記錄日誌信息,當然是非常頻繁且是少不了的,幾乎是每時每刻都在發生。對系統吞吐量和併發

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