最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

擦亮自己的眼睛去看SQLServer之簡單Insert

來源:懂視網(wǎng) 責編:小采 時間:2020-11-09 07:42:28
文檔

擦亮自己的眼睛去看SQLServer之簡單Insert

擦亮自己的眼睛去看SQLServer之簡單Insert:寫事務日志 :數(shù)據(jù)修改事務中唯一一個總是需要寫入磁盤的操作。并不是修改查詢語句的清單,而是修改操作發(fā)生之后數(shù)據(jù)頁面的具體變化。是由日志管理器完成??吹綄懭氪疟P,我們應該立刻聯(lián)想到性能問題,因為這個操作是總是寫入磁盤。如果一條語句的操作的數(shù)據(jù)
推薦度:
導讀擦亮自己的眼睛去看SQLServer之簡單Insert:寫事務日志 :數(shù)據(jù)修改事務中唯一一個總是需要寫入磁盤的操作。并不是修改查詢語句的清單,而是修改操作發(fā)生之后數(shù)據(jù)頁面的具體變化。是由日志管理器完成。看到寫入磁盤,我們應該立刻聯(lián)想到性能問題,因為這個操作是總是寫入磁盤。如果一條語句的操作的數(shù)據(jù)

寫事務日志 :數(shù)據(jù)修改事務中唯一一個總是需要寫入磁盤的操作。并不是修改查詢語句的清單,而是修改操作發(fā)生之后數(shù)據(jù)頁面的具體變化。是由日志管理器完成??吹綄懭氪疟P,我們應該立刻聯(lián)想到性能問題,因為這個操作是總是寫入磁盤。如果一條語句的操作的數(shù)據(jù)

  寫事務日志:數(shù)據(jù)修改事務中唯一一個總是需要寫入磁盤的操作。并不是修改查詢語句的清單,而是修改操作發(fā)生之后數(shù)據(jù)頁面的具體變化。是由日志管理器完成??吹綄懭氪疟P,我們應該立刻聯(lián)想到性能問題,因為這個操作是總是寫入磁盤。如果一條語句的操作的數(shù)據(jù)很大的話,這個耗時是十分可怕的。

  舉個例子:如果想知道這個差距,你可以在百萬或者千萬的表中執(zhí)行以下兩條語句體會以下:truncate table Test以及delete from Test。當然嚴謹?shù)耐瑢W會說truncate是針對區(qū)操作,delete是針對頁操作,truncate的鎖消耗也比delete的鎖消耗少。這些是會導致truncate比delete快的原因。但是這些原因不是主要原因,主要原因就是這里說的寫事務日志,delete是每次刪除一行,并在事務日志中為所刪除的每行記錄一項,而truncate是通過釋放存儲表數(shù)據(jù)所用的數(shù)據(jù)頁來刪除數(shù)據(jù),并且只在事務日志中記錄頁的釋放。既然事務日志會影響性能,為什么還記錄呢?主要解決保護數(shù)據(jù)以及數(shù)據(jù)一致性的問題。

  接收寫請求:一旦訪問方法接收到寫事務日志成功的確認信息,就會接收寫請求,將寫請求發(fā)送緩存區(qū)管理器。注意了,這里是把請求交給緩存區(qū)管理器,緩存區(qū)管理器只是操作緩存跟物理文件沒有任何關系。這里強調(diào)的目的是,如果沒有理解這里說的原理的話。你可能會為自己做了大量的插入操作,而數(shù)據(jù)文件的大小沒有任何變化而感到匪夷所思。訪問方法表面上起了請求傳遞的作用,其實它很智能,有一些比較復雜的算法來預測執(zhí)行情況。

  插入緩沖池:緩沖區(qū)管理器在內(nèi)存中插入數(shù)據(jù),插入成功后將確認結(jié)果發(fā)送給訪問方法,最終確認結(jié)果到達客戶端。

  寫入數(shù)據(jù)文件:這個步驟可以由兩個組件任何一個完成。惰性寫入器線程定期檢查SQL Server空閑緩沖列表的大小,當這個值過低的時候,惰性寫入器會掃描整個數(shù)據(jù)緩存,將所有一段時間沒被使用的頁面老化。如果找到一段時間沒有被使用的臟頁,惰性寫入器則將其寫入磁盤并且刪除,然后將這個頁面的內(nèi)存空間標記為空閑空間。惰性寫入器還會監(jiān)測服務器上的空閑物理內(nèi)存,如果內(nèi)存很少它會將SQL Server的空閑緩沖列表釋放給Windows,在SQL Server負載很重時,它還會在服務器有空閑物理內(nèi)存且已給SQL Server分配的內(nèi)存還沒有達到我們配置的最大服務器內(nèi)存(max server memory)時增加SQL Server的空閑緩沖列表以適應負載。

  檢查點是檢查點線程創(chuàng)建的一個時間點,將保證臟頁都寫入磁盤,并且在頁面頭將緩存中的這個頁面標記為干凈的頁面,注意檢查點是不刪除臟頁的。至于檢查點的執(zhí)行時間是要分幾種情況的:如果你配置了recovery interval(min),就以這個為準。如果沒有配置,并且這上一次檢查點結(jié)束后寫入的事務日志數(shù)據(jù)超過10MB,則大約每分鐘啟動一次。還比如,我們?nèi)藶閳?zhí)行checkpoint執(zhí)行,或者執(zhí)行備份重啟命令都會觸發(fā)檢查點。拋開我們?nèi)藶椴僮?,這個具體時間確實無法確定,SQL Server有內(nèi)部啟發(fā)算法控制這個值。不過我們可以開啟一個跟蹤標志3502能查看。這個跟蹤標志在錯誤日志中記錄了檢查點的開始與結(jié)束為止。sql語句為:dbcc traceon(3502) 。

  三、結(jié)尾

  今天主要就是介紹了插入語句的執(zhí)行過程,內(nèi)容不多。你從這個過程中你會發(fā)現(xiàn)SQL Server真的很智能。比如這里的預寫日志來保護數(shù)據(jù),延遲將數(shù)據(jù)寫入磁盤、預測SQL執(zhí)行情況、監(jiān)控負載調(diào)整內(nèi)存等等。設計的都是那么巧妙,大家可以想想如果我們在設計自己的軟件時是否可以參考和借鑒呢?

  今天分析就到此結(jié)束,文中如有描述不當?shù)牡胤?,歡迎指出。共同進步才是硬道理。

擦亮自己的眼睛去看SQLServer之簡單Select

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

擦亮自己的眼睛去看SQLServer之簡單Insert

擦亮自己的眼睛去看SQLServer之簡單Insert:寫事務日志 :數(shù)據(jù)修改事務中唯一一個總是需要寫入磁盤的操作。并不是修改查詢語句的清單,而是修改操作發(fā)生之后數(shù)據(jù)頁面的具體變化。是由日志管理器完成??吹綄懭氪疟P,我們應該立刻聯(lián)想到性能問題,因為這個操作是總是寫入磁盤。如果一條語句的操作的數(shù)據(jù)
推薦度:
標簽: 自己的 眼睛 簡單
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top