關於writes寫入次數的誤區

2021-08-08 20:23:15 字數 2302 閱讀 9679

在群裡小夥伴提出的乙個問題,感覺很有意思,所以專門分享一下。

在運維資料庫的時候,有時候會遇到磁碟寫入非常頻繁的情況。磁碟活動時間100%,佇列長度高等。如下圖:

此時,我們經常會去做的一件事情是,開啟profier 然後檢視write數字高的語句,找出是什麼語句造成的寫入壓力。

關於這個列,微軟的說明如下:代表寫入物理磁碟的次數

微軟在官網文件:

資料修改的過程

當客戶端發出如下請求時:update test set id=10 where id=1 ,資料庫內部修改過程如下:

1 .修改記憶體中,也就是buffer pool裡面的資料頁.

2.把日誌寫入ldf日誌檔案

此時 事務就可以提交了。對前面應用來講。這個update操作已經完成。

3.後台程序進行checkpoint 或者 lzay writer 的時候,才會吧記憶體中的髒頁重新整理到mdf磁碟檔案

不過對於批量寫入比如bulk insert and select into.,有乙個 eager writer。頁面可能會馬上被寫入磁碟

select '更新前', num_of_writes, num_of_bytes_written

--更新後

select *

from sys.dm_os_buffer_descriptors

where database_id = db_id()

and is_modified = 1

select '更新後', num_of_writes, num_of_bytes_written

從圖中,可以看到,髒頁增加了,但是 資料檔案的寫入次數並沒有增加。

--checkpoint以後

checkpoint

select *

from sys.dm_os_buffer_descriptors

where database_id = db_id()

and is_modified = 1

select 'checkpoint後', num_of_writes, num_of_bytes_written

checkpoint以後髒頁沒有了,寫入磁碟次數從77變成了84

從上面測試可以看出,profiler裡面的writer 字段 和官方的描述有出入。並不能代表實際的磁碟寫入.所以如果磁碟有壓力還需要從其他的是方法去排查。

關於python類的誤區

1 關於類裡面的self定義,同理,self是可以被替換為其他字元的,只是標記的一種 class test def prt self print self print self.class t test t.prt main test instance at 0x100771878 main tes...

關於參加ACM的幾個誤區

關於參加 acm的幾個誤區 一 不要做了幾百個題目就把自己當牛人,這只是成為牛人的必要條件而不是充分條件 二 不要才做了幾個水題就學大牛說 做題多了沒用 至少先ac 500題再來思考這個問題 正如不要人云亦云什麼 錢多了沒用 一樣,這都是有錢人的感慨 三 不要在多次失敗後總找藉口說 發揮不好 或者 ...

關於js閉包的誤區

一直以為js的閉包只是內部函式儲存了乙份外部函式的變數值副本,但是以下 打破了我的認識 function createfunctions return result var funcs createfunctions for var i 0 i 10 i 執行結果是10個10 而不是0 9 看了js...