TempDB為什么要根據CPU數目來決定文件個數

???? 在SQL Server的世界中,SQL Server在Windows之上有一套自己的任務調度和資源分配系統,這使得SQL Server作為Windows的一個進程,卻可以處理大量的并發,這些任務調度和資源分配非常像一個操作系統,因此SQL Server在Windows之上,有一層被稱為SQL OS的系統。

??? 類似Windows進程之間的任務調度,SQL Server OS也有一套自己的調度方案,在早期的SQL Server曾經使用Windows自帶的進程調度系統,但由于SQL Server是一個處理高并發的進程,因此Windows調度造成的線程切換(Context Switch)會帶來很多的資源浪費,并且Windows調度是搶占式調度,這對于SQL Server來說非常不利,因此SQL Server OS通過非搶占式調度算法來調度進程,除非線程自己釋放資源,SQL Server不會強制剝奪資源(當然了,一些極端情況比如死鎖,或是檢查scheduler時發現不利問題,會記錄到日志,但依然不會搶占資源),這也使得開發人員對T-SQL語句需要小心,當然了這是題外話了。

??? 在了解了SQL Server基本的調度算法后,再讓我們通過一個圖來了解一下簡單的SQL Server中線程的幾種狀態(這類線程對Windows來說是線程,對SQL Server來說是進程,這也是為什么查詢這些線程的時候用的是Sysprocess微笑),如圖1所示。

??? 111

??? 圖1.SQL Server OS的簡單算法

??? 如果你了解操作系統的調度算法的話,你會發現這里和操作系統的形式一樣,當線程得到等待的資源并獲得CPU時,就會是運行狀態,而當獲得資源沒有CPU時,就會是Runnable狀態,或是當線程所需的資源沒有到位時,就會是阻塞狀態。

??? 因此,多個CPU可以有多個線程在Running狀態。

??? 另外在SQL Server中,每創建一個新表時,都會為表分配存儲頁面,相應的,SQL Server也需要修改GAM,SGAM和FPS頁。對于修改這些頁來說,SQL Server需要在修改的時候加上一個輕量級的鎖,這也就是所謂的閂鎖(Latch)。當多個線程同時需要修改GAM,SGAM,FPS頁時,閂鎖會造成阻塞。對于用戶數據庫來說,不可能一直存在DDL操作,但對于Tempdb來說,會經常進行建表和刪表,因此對于GAM,SGAM以及FPS頁都會經常修改,如果Tempdb只有一個文件而CPU存在多核的時候,多個同時運行的任務有可能爭搶GAM,SGAM,FPS頁的修改權,因此造成阻塞,這對性能是非常不利的,而按照CPU個數將TempDB的文件分為多份,則會存在多個GAM,SGAM,FPS頁。多個Running的線程會按照每個文件的大小平均分布到不同的文件中,因此解決了爭用問題。

??? 另外,值得注意的是,對于TempDB的最佳做法是一開始就為每一個文件分配足夠大的值。并且每個文件大小相等,這就避免了某個文件增長導致的文件大小不一,而SQL Server對于文件的使用比率是按照文件大小,如果文件大小不一樣,就會造成熱點文件,從而有可能造成閂鎖爭用。

轉載于:https://www.cnblogs.com/CareySon/archive/2012/10/06/2713260.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260339.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260339.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260339.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python基礎到實踐_一本書搞定Python入門到實踐

題圖:Photo by Aaron Burden on Unsplash上周介紹了幾本Python從入門到進階書籍,今天推薦一本入門好書《Python編程:從入門到實踐》,適合零基礎小白,也適合有其它語言背景的程序員。書中有哪些亮點?2016年出…

Linux網卡eth0變成eth1修改方法

由于換了主板,集成網卡mac地址變了,70-persistent-net.rules中仍然保留了老網卡的內容,新網卡則被識別為eth1。 將表示老網卡的行注釋掉,然后將表示新網卡的行中eth1改成eth0,在把網卡配置文件ifcfg-eth0的mac地址改成…

java微博模擬登陸_java 模擬登錄新浪微博(通過cookie)

這幾天一直在研究新浪微博的爬蟲,發現爬取微博的數據首先要登錄。本來打算是通過賬號和密碼模擬瀏覽器登錄。但是現在微博的登錄機制比較復雜。通過賬號密碼還沒有登錄成功QAQ。所以就先記錄下,通過cookie直接訪問自己的微博主頁。微博登錄的認證過程微博…

硬盤結構,主引導記錄MBR,硬盤分區表DPT,主分區、擴展分區和邏輯分區,電腦啟動過程...

filex的文件系統看的云里霧里,還是先總結下FAT的一些基本知識吧。硬盤結構硬盤有很多盤片組成,每個盤片的每個面都有一個讀寫磁頭。如果有N個盤片。就有2N個面,對應2N個磁頭(Heads),從0、1、2開始編號。每個盤片的半徑均為固定值R…

最全面 Nginx 入門教程 + 常用配置解析

轉自 http://blog.csdn.net/shootyou/article/details/6093562 Nginx介紹和安裝 一個簡單的配置文件 模塊介紹 常用場景配置 進階內容 參考資料 Nginx介紹和安裝 Nginx是一個自由、開源、高性能及輕量級的HTTP服務器及反轉代理服務器, 其性能與IMAP/POP3代理服務器…

linux 客戶機中不支持 unity_婚姻中的不理解,來源于夫妻雙方情感支持的不同

很多女性在婚姻中往往覺得無法得到丈夫的理解,當遇到一些生活或者工作上的問題的時候,她們想要在情感上得到丈夫的支持和理解。但是很多丈夫對此可能并不了解和理解,更傾向于用理性幫助妻子解決問題。而女性所需要的幫助可能并不是解決問題的…

Linux中使用crontab命令啟用自定義定時任務

一 簡介Linux下的任務調度分為兩類,系統任務調度和用戶任務調度系統任務調度:系統需要定期執行的任務,比如重啟、日志清理等,其配置文件是:/etc/crontab用戶任務調度:某個用戶需要定期執行的任務。用戶可以…

java 循環標記_深入淺析Java 循環中標簽的作用

continue和break可以改變循環的執行流程,但在多重循環中,這兩條語句無法直接從內層循環跳轉到外層循環。在C語言中,可以通過goto語句實現多重循環的跳轉,但在非循環結構中使用goto語句會使程序的結構紊亂,可讀性變差。…

JS,Jquery 調用 C#WebService

1&#xff0c;需要在服務下面把代碼的注釋去掉 // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務&#xff0c;請取消對下行的注釋。   //[System.Web.Script.Services.ScriptService] 2,JS 調用方法如下 var request <?xml version"1.0" encoding"…

iOS tabview 適配問題

ios7的UITableView實現ios6的圓角效果 iOS7 UITableView做成類似iOS6風格 在iOS7的時候我們會發現cell的默認線條會向右偏移&#xff0c;使左邊空出了一些位置&#xff0c;這時候我們可以調用如下的方法來解決。這樣我們的cell就會和iOS6前的一樣鋪滿整個寬度了。 if ([tableVi…

PHP學習總結(14)——PHP入門篇之常用運算符

一、什么是運算符什么是運算符&#xff1f;運算符是告訴PHP做相關運算的標識符號。例如&#xff0c;你需要計算123乘以456等于多少&#xff0c;這時候就需要一個符號&#xff0c;告訴服務器&#xff0c;你需要做乘法運算。PHP中的運算符有哪些&#xff1f;PHP運算符一般分為算術…

百度時間顯示_文章的發布時間對百度優化網站重要嗎

文章的發布時間對百度優化網站重要嗎&#xff1f;這個問題&#xff0c;相信很多初做網站優化的萌新朋友都會問到&#xff0c;以小匠個人的經歷來分享這個問題的經驗&#xff0c;小匠認為&#xff0c;文章的發布時間對優化網站是非常重要的&#xff0c;下面小匠將從實際經歷來給…

循環鏈表解決約瑟夫環問題

約瑟夫環問題可以簡單的使用數組的方式實現&#xff0c;但是現在我使用循環鏈表的方法來實現&#xff0c;因為上午看到一道面試題規定使用循環鏈表解決約瑟夫環問題。 什么是約瑟夫環&#xff1f; “約瑟夫環是一個數學的應用問題&#xff1a;已知n個人&#xff08;以編號1&…

java 什么時候進行垃圾回收_java什么時候進行垃圾回收,垃圾回收的執行流程

java的垃圾回收分為三個區域新生代 老年代 永久代一個對象實例化時 先去看伊甸園有沒有足夠的空間如果有 不進行垃圾回收 ,對象直接在伊甸園存儲.如果伊甸園內存已滿,會進行一次minor gc然后再進行判斷伊甸園中的內存是否足夠如果不足 則去看存活區的內存是否足夠.如果內存足夠…

常用的webservice接口

商業和貿易&#xff1a; 1、股票行情數據 WEB 服務&#xff08;支持香港、深圳、上海基金、債券和股票&#xff1b;支持多股票同時查詢&#xff09; Endpoint: http://webservice.webxml.com.cn/WebServices/StockInfoWS.asmx Disco: http://webservice.webxml.com.cn/WebServ…

基于HTML5 Canvas 實現矢量工控風機葉輪旋轉

之前在拓撲上的應用都是些靜態的圖元&#xff0c;今天我們將在拓撲上設計一個會動的圖元——葉輪旋轉。 先看看最后我們實現的效果&#xff1a;http://www.hightopo.com/demo/fan/index.html 我們先來看下這個葉輪模型長什么樣 從模型上看&#xff0c;這個葉輪模型有三個葉片&a…

java 并發模型總類_java并發編程系列-內存模型基礎

java線程之間的通信對程序開發人員是完全透明的&#xff0c;內存的可見性問題很容易困擾很多開發人員。本篇博文將揭開java內存模型的神秘面紗&#xff0c;來看看內存模型到底是怎樣的。并發編程模型的分類并發編程中需要處理的兩個關鍵問題&#xff1a;線程之間如何通信線程之…

python調用java的jar包_python調用java的jar包報錯127

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓最近在弄python需要調用到Java的jar包&#xff0c;按照網上的教程走&#xff0c;最后總是報錯No matching overloads found for [init in find. at native\common\jp_method.cpp:127Java&#xff1a;package aes;import com.sun.cr…

iphone、Android接收System.Net.Mail發的郵件標題亂碼

參考地址&#xff1a;http://blog.csdn.net/whowhen21/article/details/5959225 在做項目時候&#xff0c;用到.Net的System.Net.Mail發送郵件&#xff0c;經測試&#xff0c;發現如果標題過長&#xff0c;收到的就會是亂碼了(那種Base64格式的數據)&#xff0c;幾經測試&#…

數據倉庫與數據挖掘的一些基本概念

下面內容摘自互聯網并作了整理。 名詞&#xff1a; BI(Business Intelligence)&#xff1a;商業智能&#xff0c; DW(Data Warehouse)&#xff1a;數據倉庫&#xff0c;詳見正文Q1部分。 OLTP(On-Line Transaction Processing)&#xff1a;聯機事務處理 也稱為面向交易的處理系…