91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL SERVER ALWAYS ON 為什么日志無法dump

發布時間:2021-12-09 09:56:18 來源:億速云 閱讀:136 作者:柒染 欄目:大數據

SQL SERVER  ALWAYS ON 為什么日志無法dump,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

SQL SERVER 還有人用,對的,很多人都在用,尤其很多企業,非互聯網的企業。那今天就說說 SQL SERVER ALWAYS ON 高可用集群中,為什么不切日志的問題。引起這篇文字的原因是有一個81G 都沒有切除日志的 AWO集群。

SQL SERVER 和其他的數據庫在日志方面不大一樣,其中有一個概念叫 VLFS,每個物理事務日志文件在內部劃分為許多虛擬日志文件(VLFs)。虛擬日志文件沒有特定的大小,也不能指定物理日志文件中有多少個VLF,這些都是數據庫引擎來操作的,但實際當中SQL SERVER 是建議你減少 VLF的數量,雖然你的LDF文件可能只有一個,但是LDF 里面的 VLF 的文件數量可能就與你的SQL SERVER  日志文件增長大小,與增長比率有關了。如果你想獲取較少的VLF,那就別吝嗇,經常看到有人為了減小日志,給紅色圈的位置設置LDF的大小,呵呵,呵呵就是我對這樣設置的表情,無知者無畏。

SQL SERVER  ALWAYS ON 為什么日志無法dump

另外為什么增量要設置的比較大,原因就是這個VLF, 在申請擴大日志文件的時候,其實就是生成了一個VLF,如果設置的太小,例如有些人設置 1MB 的增量,想想如果有大量日志寫入,對SQL SERVER 是一件多么奇怪的事情。

SQL SERVER  ALWAYS ON 為什么日志無法dump

日志文件本身內部也是順序型,當VLF 文件的開頭被截斷了,這就說明這塊VLF 虛擬文件可以使用了,的事務日志開頭的日志記錄在日志結束時被截斷,它就會回到開頭,并覆蓋之前的內容。  

那原理基本上明確了,首先第一點日志不能shrink 的就是在“小氣鬼” 自作聰明的申請日志空間的“摳門”行為。如果我一個1000MB的日志文件里面都是1MB大小的VLF, 后面只要有一個VLF 文件日志不截斷,你前邊的日志都截斷,他也無法釋放磁盤空間給你的操作系統。

另外從另一個觀點來看如果一個系統你只設置一個LDF文件,也是讓你的系統日志空間不容易被收回的根源,原理就很簡單了,自己想想就明白了。

所以建議是,1 SQL SERVER 日志文件,可以是多個,根據你的系統的繁忙程度和你對日志釋放空間的“迫切心情”。

2 日志的增量設置,別太摳門

這樣就能大概率的讓單機上幾十,上百G的磁盤空間有可能被釋放回來,當然不釋放也不用太擔心,因為會繼續循環使用。

當然如果想借用并行的概念到 SQL SERVER LDF 妄想通過多個文件,提高性能,那你就參見MYSQL 的BINLOG ,POSTGRESQL  WAL LOG,這方面的他們都是一樣的,串行。

這時可能就有人問,到底為什么會有日志空間不足的情況,

1 未提交的事務

2 創建大表的索引

3 復制中沒有復制過去的事務

4 長期運行的事務,也不給人家COMMIT 

5 特別大的事務,幾百行,上千行,上萬行的那種從 begin 到 commit 只有一個的奇葩。

下面是一個腳本,通過這個腳本,可以看到你當前的數據庫可用的ldf的數據庫空間是多少

SQL SERVER  ALWAYS ON 為什么日志無法dump

DBCC SQLPERF(LOGSPACE) 

通過上面的命令可以看到總體的數據庫日志占用的比率。

也可以通過下面的命令來查看 ldf 文件中的VLF 的情況

select * from sys.dm_db_log_info ( db_id('aap') )  

SQL SERVER  ALWAYS ON 為什么日志無法dump

通過 vlf_active 和 vlf_status 兩個字段可以清晰的看到 LDF 文件里面的那些VLF 是被激活的,那些是可以使用的。

SQL SERVER  ALWAYS ON 為什么日志無法dump

SQL SERVER  ALWAYS ON 為什么日志無法dump

通過上邊的腳本我們就可以知道,在我們當前庫里面的LDF 文件中,LDF 可以收縮的數量,并且能分析出在Active log  之前有多少日志是 FREE 有多少日志active log 在之后是 free的。

SELECT name AS 'Database Name', log_backup_time AS 'last log backup time' 

FROM sys.databases AS s

CROSS APPLY sys.dm_db_log_stats(s.database_id); 

上面也講了,要切日志的話,有三點(單機)

1 數據庫處于simple的模式

2 數據庫做了FULL BACKUP

3 數據庫在2的基礎上做了 transaction log backup

回到題目到底有多少原因可以讓日志無法進行transaction,

CHECKPOINT
LOG_BACKUP
ACTIVE_BACKUP_OR_RESTORE
ACTIVE_TRANSACTION
DATABASE_MIRRORING
REPLICATION
DATABASE_SNAPSHOT_CREATION
LOG_SCAN
AVAILABILITY_REPLICA
OLDEST_PAGE
XTP_CHECKPOINT
OTHER TRANSIEN

其實我們可以很簡單將always on 中的數據庫為什么不切斷日志,在這個上面去尋找對應的問題點就可以了

以我現在所在的數據庫AWO,log_truncation_holdup_reason的原因是log_backup, 那我們就去做log_transaction的backup 看看問題是否能解決

SQL SERVER  ALWAYS ON 為什么日志無法dump

SQL SERVER  ALWAYS ON 為什么日志無法dump

在我做完日志備份,并選擇截斷后。

SQL SERVER  ALWAYS ON 為什么日志無法dump

再次去查看日志hold的原因,很清晰的顯示nothing 也就是日志被截斷了。

SQL SERVER  ALWAYS ON 為什么日志無法dump

我們在對比這篇文字的上面的圖可以看出在做了transaction backup 后,的確釋放了5MB的空間。由于沒有給AWO 主庫做 TRANACTION BACKUP導致的日志不能被transaction log 不能被dump的問題解決了

是否還有其他的原因造成日志的空間不能被重復利用

那長時間運行的事務,例如一個存儲過程寫了上千行,運行一次就要幾個小時的那種,很可能就會影響你的ACTIVE_TRANSACTION,如果發現系統經常顯示ACTIVE_TRANSACTION,那就去和你的開發或者供應商來聯系一下,是否存在這個問題。長事務無法完成,導致日志無法被截斷沖利用,然后惡性循環。

除此以外,SQL SERVER AWO 備份如果想截斷日志,則需要在主庫上primary上操作,雖然可以在standby 從庫上操作備份,FULL 或者 copy_ONLY的模式,但這樣也是沒有辦法來將日志進行cut off dump的。

最后與AWO 有關日志無法dump 的原因還有就是數據的復制可能出現了問題AVAILABILITY_REPLICA,當顯示log hold 是AVAILABILITY_REPLICA的情況下,如果所有的輔助副本都沒有完成重做的日志記錄處理,那么主副本上的日志備份不會截斷日志。

這里還有一種情況就是 主機的配置高,多臺副本中有配置低的機器,這樣也會影響你的主庫的日志dump所以當出現上面無法對主庫日志dump的情況下Redo Byte Remaining是你的一個監控點。 所以這也是要求,AWO 的各個節點的配置要一致,從庫所負擔的,除了少了SELECT的操作,寫的操作可以看做是主庫的 DOUBLE。

哦忘了,如果你在使用SQL SERVER 2016 , 2017 ,2019 會有一個error 9002的問題,導致日志無法回收,所以這也是數據庫系統別求太新,當然補丁已經好了,可以去微軟上下載并打上。

看完上述內容,你們掌握SQL SERVER  ALWAYS ON 為什么日志無法dump的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正蓝旗| 阿合奇县| 玛沁县| 洞口县| 肃宁县| 全南县| 宣武区| 广宗县| 澜沧| 门头沟区| 高碑店市| 兴安盟| 河间市| 安岳县| 禹州市| 廉江市| 昭苏县| 汝南县| 屏东市| 商丘市| 邯郸市| 同江市| 临高县| 清苑县| 海兴县| 南和县| 周至县| 莫力| 宁南县| 芷江| 清涧县| 会泽县| 峨眉山市| 娄底市| 禹州市| 镇平县| 乐平市| 突泉县| 陆河县| 辽中县| 平武县|