亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

為什么事務日志自動增長會降低你的性能

2024-07-21 02:46:31
字體:
來源:轉載
供稿:網友
為什么事務日志自動增長會降低你的性能

在這篇文章里,我想詳細談下為什么你要避免事務日志(Transaction Log)上的自動增長操作(Auto Growth Operations)。很多運行的數據庫服務器,對于事務日志,用的都是默認的日志文件大小和自動增長設置。人們有時會很依賴自動增長機制,因為它們剛好能正常工作。當然,如果它正常工作的話,你不必太關注它,但很快你會發現會有問題出現。

只依賴于事務日志的自動增長機制總不是個好主意。首先它會導致嚴重的日志碎片(Log Fragmentation),在SQL Server啟動期間,在你數據庫上執行崩潰恢復(Crash Recovery)時會有很大的負面影響。另外,在你數據庫里寫入事務需要等待,只要事務日志觸發了自動增長機制。

當事務日志的自動增長機制發生時,SQL Server總要零初始化新塊,這個會在文件末尾加上。這和你的SQL Server實例是否用即時文件初始化(Instant File Initialization)特權——事務日志總會零初始化。這上面的原因非常明顯:當SQL Server在過去已經完成事務日志的環繞式處理(wrap-around),崩潰恢復(Crash Recovery)需要知道在哪里停。

零初始化的問題是會占用更多的時間(取決與你的自動增長率,還有你的存儲速度)。在此期間沒有別的事務可以寫事務日志記錄到事務日志。在事務日志管理器上會有閂鎖造成的阻塞。因此你的寫入事務會進入掛起狀態(直到它們獲得需要的閂鎖),它們就等啊,等啊,等啊,直到你的事務日志自動增長完成。讓我們用一個簡單的例子演示下。

首先我為這個演示創建一個新的數據庫。對于這個數據庫,這里我不用默認的設置,對于事務日志,我指定了10GB的自動增長系數。這個的確是個不好的做法,但我只是用它來展示這個設置的副作用。請不要在你的生產數據庫里使用這個錯誤配置?。?!

 1 -- Create a new database with 10 GB Auto Growth for the Transaction Log 2 CREATE DATABASE AutoGrowthTransactionLog ON PRIMARY  3 ( 4     NAME = N'AutoGrowthTransactionLog',  5     FILENAME = N'C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/AutoGrowthTransactionLog.mdf', 6     SIZE = 5120KB,  7     FILEGROWTH = 1024KB 8 ) 9 LOG ON 10 (11     NAME = N'AutoGrowthTransactionLog_log',12     FILENAME = N'C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/AutoGrowthTransactionLog_log.ldf',13     SIZE = 1024KB,14     FILEGROWTH = 10240000KB -- 10 GB Auto Growth!15 )16 GO

下一步里我在數據庫里創建2個表。第1個表我通過插入一些日志來快速填充我的事務日志。在事務日志自動增長階段,我們在第2個表里插入新的記錄來證明這個事務會被自動增長機制阻塞。

 1 -- Create a new table, every records needs a page of 8kb 2 CREATE TABLE Chunk 3 ( 4     Col1 INT IDENTITY PRIMARY KEY, 5     Col2 CHAR(8000) 6 ) 7 GO 8  9 -- Another simple table10 CREATE TABLE Foo11 (    12     Bar INT NOT NULL13 )14 GO

現在我們已經創建了必須的數據庫對象,因次我可以通過新的沒有立即提交的事務來填充事務日志:

1 -- Begin a new transaction, that blocks the 1st VLF in the Transaction Log2 BEGIN TRANSACTION3 INSERT INTO Chunk VALUES (REPLICATE('x', 8000))4 GO

因為我們現在有了進行中,沒提交的事務,SQL Server不能重用那部分事務日志,即這個事務存儲的事務日志。它們有需要回滾的可能。因此現在我通過不同的會話插入66條其他記錄來填充事務日志:

1 INSERT INTO AutoGrowthTransactionLog.dbo.Chunk VALUES (REPLICATE('x', 8000))2 GO 66

最后在第一個會話里提交我們的事務:

1 COMMIT

這意味著在我們面前有一個幾乎滿的的事務日志,我們可以通過DBCC LOGINFO來驗證:

1 DBCC LOGINFO

現在當我們往表里插入兮的記錄時,事務日志已經沒有可用空間了,SQL Server進入事務日志的自動增長。

1 -- This statement will trigger the Auto Growth mechanism!2 INSERT INTO Chunk VALUES (REPLICATE('x', 8000))3 GO

在自動增長期間的同時,為了監控發生了什么,我們可以在SSMS里打開新的一個會話窗口,嘗試在第2個表插入另外的記錄——表Foo

1 -- This statement is now blocked by the Auto Growth mechanism.2 INSERT INTO Foo VALUES (1)3 GO

這個SQL 語句會阻塞,因為事務要寫入事務日志記錄的事務日志,當前不可用。為了進一步分析這個阻塞情形,你可以打開第3個會話窗口,執行下列2個SQL語句:

1 -- Analyze the blocking situation2 SELECT wait_type, * FROM sys.dm_exec_requests3 WHERE session_id IN (54, 55)4 5 SELECT wait_type, * FROM sys.dm_os_waiting_tasks6 WHERE session_id IN (54, 55)7 GO

(額,俺本機測試失敗………………)

從代碼里可以看到,我用2個DMVsys.dm_exec_requests 和 sys.dm_os_waiting_tasks對2個會話都進行了跟蹤——觸發自動增長的會話,和被自動增長機制阻塞的會話。在這里,觸發自動增長的會話里有所謂的搶占等待類型(Preemptive Wait Type)——PREEMPTIVE_OS_WRITEFILEGATHER。搶占等待類型是由SQL Server返回的等待類型,當SQL Server 執行一個WIN32 API函數在調度機制之外時。這里自動增長是通過WriteFileGather的WIN32 API函數完成的。

INSERT語句嘗試在Foo表里插入新的記錄出現LATCH_EX等待類型。如你從DMVsys.dm_os_waiting_tasks 里的resource_description列所見,在SQL Server的日志管理器上需要獲得閂鎖。你可以通過查詢DMVsys.dm_os_latch_stats 限制lactch class為LOG_MANAGER再次確認。在那個特定閂鎖上你會看到一些等待。那個閂鎖是事務獲取的,由事務日志的自動增長觸發,只要這個閂鎖要獲得,每個其他寫事務都會被阻塞。因此在系統上有大量等待時間時,這暗示這在事務日志里當前有自動增長問題需要處理。

希望我已經用這個日志說服你,依賴于事務日志的自動增長機制并不是最好的解決方案。用這個簡單的例子可以看到,在你數據庫里每個被自動增長操作阻塞的寫入事務會發生阻塞,這肯定會傷及你數據庫的吞吐量和擴展性。為了保證你有很好的事務日志性能,你可以最佳想實踐下這個文章。

感謝關注!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
68精品久久久久久欧美| 欧美激情欧美激情| 成人乱人伦精品视频在线观看| 亚洲第一网站免费视频| 国产精品成人一区| 久久久视频精品| 亚洲一区二区三| 久久久久久久久久久av| 亚洲一区二区国产| 亚洲国产精品成人av| 国产不卡av在线| 国产精品人成电影在线观看| 久久天天躁夜夜躁狠狠躁2022| 精品久久久久久中文字幕| 成人欧美一区二区三区黑人孕妇| 日韩成人在线免费观看| 国产精品女人久久久久久| 久久久影视精品| 最新国产精品亚洲| 久久99精品国产99久久6尤物| 欧美日韩激情美女| 亚洲精品成人免费| 久热爱精品视频线路一| 欧美肥老太性生活视频| 成人国产在线激情| 精品久久香蕉国产线看观看亚洲| 在线视频亚洲欧美| 欧美在线视频免费观看| 日韩亚洲欧美成人| 亚洲高清色综合| 成人欧美一区二区三区在线湿哒哒| 欧美黄色免费网站| 日韩国产高清视频在线| 欧美成人手机在线| 国产精品视频永久免费播放| 另类少妇人与禽zozz0性伦| 久久成人亚洲精品| 伊人伊成久久人综合网站| 亚洲人成电影在线观看天堂色| 欧美激情在线视频二区| 亚洲精品一区久久久久久| 国产欧美精品在线播放| 亚洲性69xxxbbb| 日韩av免费网站| 欧美日韩国产影院| 97视频在线播放| 亚洲深夜福利在线| 国产99视频在线观看| 91九色单男在线观看| 亚洲自拍在线观看| 日韩免费观看在线观看| 国产精品中文字幕在线观看| 国模精品视频一区二区三区| 国产欧美日韩综合精品| 欧美精品videosex性欧美| 久久久精品中文字幕| 国产不卡精品视男人的天堂| 亚洲美女自拍视频| 国语自产精品视频在线看一大j8| 亚洲大胆人体在线| 亚洲天堂成人在线| 自拍偷拍亚洲精品| 国产精品都在这里| 欧美视频免费在线观看| 亚洲美女www午夜| 久久精品国产2020观看福利| 欧美日韩亚洲一区二区| 欧美日韩日本国产| 影音先锋欧美精品| www.欧美三级电影.com| 97不卡在线视频| 亚洲男人天堂九九视频| 精品久久香蕉国产线看观看亚洲| 最近2019中文字幕一页二页| 日韩精品在线免费观看视频| 久久久噜噜噜久久久| 国内精品400部情侣激情| 欧洲亚洲免费视频| 国产精品免费一区豆花| 亚洲免费影视第一页| 国内精品美女av在线播放| 青青青国产精品一区二区| 国产在线观看精品一区二区三区| 日韩欧美在线第一页| 欧美性猛交xxxx乱大交极品| 国产精品一区二区三区成人| 中国日韩欧美久久久久久久久| 2019亚洲日韩新视频| 国产精品国产三级国产专播精品人| yellow中文字幕久久| 欧美在线观看网站| 欧美精品久久久久a| 欧美电影在线观看网站| 亚洲国产精品人久久电影| 最近2019年好看中文字幕视频| 97精品久久久中文字幕免费| 亚洲jizzjizz日本少妇| 欧美性jizz18性欧美| 97视频国产在线| 一区二区三区天堂av| 欧美激情伊人电影| 日韩在线视频免费观看高清中文| 日韩美女av在线免费观看| 亚洲综合中文字幕在线观看| 欧美男插女视频| 欧美日产国产成人免费图片| 国产精品高潮呻吟久久av无限| 国产精品久久久久久av下载红粉| 欧美性xxxxx极品娇小| 国产91久久婷婷一区二区| 国产精品成人播放| 久久久久久久久久久免费精品| 国产欧美精品一区二区三区-老狼| 欧美大全免费观看电视剧大泉洋| 欧美性xxxxx极品娇小| 久久精品在线视频| 国产精品一区二区久久久| 久久精品久久久久电影| 日韩亚洲欧美中文在线| xx视频.9999.com| 色噜噜狠狠狠综合曰曰曰| 69久久夜色精品国产7777| 亚洲三级av在线| 亚洲网站在线看| 亚洲免费一在线| 日韩av网站大全| 国产偷国产偷亚洲清高网站| 日韩欧美极品在线观看| 亚洲夜晚福利在线观看| 成人久久精品视频| 久久久999国产| 欧美性视频网站| 国产精品视频网址| 日韩欧美国产激情| 亚洲欧美成人精品| 日韩精品免费综合视频在线播放| 久久久久久久久国产| 国产亚洲精品成人av久久ww| 国产成人欧美在线观看| 成人免费观看49www在线观看| 第一福利永久视频精品| 日韩精品亚洲精品| 国产日韩欧美日韩| 亚洲电影中文字幕| 国产精品久久久| 欲色天天网综合久久| www.亚洲免费视频| 久久久久久久久久婷婷| 日韩精品在线免费| 亚洲欧洲在线看| 成人免费观看网址| 日韩www在线| 亚洲欧美在线播放| 韩国福利视频一区| 黑丝美女久久久| 欧美激情欧美激情| 亚洲国产一区二区三区在线观看| 欧美激情在线播放| 欧美在线视频观看免费网站| 久久在线精品视频| 国产成人av在线播放| 96pao国产成视频永久免费| 2018日韩中文字幕| 欧美大片网站在线观看|