每個 sql server 資料庫都具有事務日誌,用於記錄所有事務以及每個事務對資料庫所做的修改。必須定期截斷事務日誌以避免它被填滿。但是,一些因素可能延遲日誌截斷,因此監視日誌大小很重要。某些操作可以最小日誌量進行記錄以減少其對事務日誌大小的影響。
事務日誌是資料庫的重要元件,如果系統出現故障,則可能需要使用事務日誌將資料庫恢復到一致狀態。刪除或移動事務日誌以前,必須完全了解此操作帶來的後果。
例如,當使用者發出乙個插入操作(insert),它被會被記錄在事務日誌中。如果出現了錯誤,資料庫可以回滾或還原事務之前的狀態,並防止資料損壞。再比如,乙個員工需要將2000條資料插入到資料庫中,這時候突然間伺服器斷電。由於insert語句已經寫入了事務日誌並且知道了出現了錯誤,它將會回滾這次操作。如果沒有這個功能,你可以想象我們需要資料篩選看到底成功插入了多少行,然後再更改其他行的**執行其他操作。 更有甚者,如果是隨機插入,你必須確定已經插入了什麼資料,什麼資料需要被排除在外。這可能需要非常非常長的時間。
日誌條目是順序的記錄在檔案中。整個日誌檔案會被分成很多小塊稱之為虛擬日誌檔案 。當乙個虛擬日誌檔案被填滿的時候,他會自動地去插入到下乙個虛擬日誌檔案。當虛擬日誌檔案已經到整個日誌檔案的末尾的時候,他將會繞回到開始的虛擬日誌檔案並且覆蓋掉之前的資料。
借用別人的圖。操作如下圖所示:
每個物理的事務日誌檔案內部分為多個虛擬日誌檔案,如上圖的(virtual log 1-4)。在物理日誌檔案中沒有指定虛擬日誌檔案大小也不能指定到底要存在多少個虛擬日誌檔案。資料庫引擎會自動的控制它們,但出於效能原因,資料庫引擎會試圖維持少量的虛擬檔案個數。
如果日誌檔案開始設定的比較小,然後設定的增長率或大小也比較小。在日誌檔案不斷增大的過程中,每次都是按許多微小增加,它將增加虛擬日誌檔案的數量,而影響系統效能。這就是為什麼要將自動增長設定為乙個較大的增量。如果日誌設定一次增長 1 mb 會不斷產生更多的虛擬日誌檔案中。不斷增加的虛擬日誌檔案會影響資料庫啟動和日誌的備份/恢復操作。
在乙個資料庫中沒有乙個正確或者是錯誤的虛擬日誌檔案個數的界定。但是記住,如果你的資料庫效能變的很糟糕,這可能是乙個原因。您可以使用 dbcc loginfo 資料庫中檢查 vlf 的數目。
dbcc loginfo結果:
關於大量的虛擬日誌檔案影響效能的問題,會在資料庫調優系列中做詳細的介紹。
mysql 日誌 事務日誌
事務性引擎依靠事務日誌保證acid 原子性,一致性,隔離性,永續性 因此事務日誌,最主要是保證事務可靠性的 事務日誌工作原理 事務日誌的每一行都是一條資訊,一般記錄事務id號,用於記錄哪個事務產生的id資訊,其次,他影響了哪個庫的哪個表,再次他原始資料,和新的資料。一般對於刪除表的操作drop ta...
innodb事務日誌
mysql會最大程度的使用快取機制來提高資料庫的訪問效率,但是萬一資料庫發生斷電,因為快取的資料沒有寫入磁碟,導致快取在記憶體中的資料丟失而導致資料不一致怎麼辦?innodb主要是通過事務日誌實現acid特性 事務日誌包括 重做日誌redo和回滾日誌undo redo記錄的是已經全部完成的事務,就是...
Zookeeper事務日誌
zookeeper集群中的每個伺服器節點每次接收到寫操作請求時,都會先將這次請求傳送給leader,leader將這次寫操作轉換為帶有狀態的事務,然後leader會對這次寫操作廣播出去以便進行協調。當協調通過 大多數節點允許這次寫 後,leader通知所有的伺服器節點,讓它們將這次寫操作應用到記憶體...