當前位置:首頁 » 編程語言 » sql數據頁緩沖內存
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql數據頁緩沖內存

發布時間: 2023-07-01 11:42:51

『壹』 sql資料庫伺服器,內存佔用過大怎麼辦

SqlServer系統內存管理在沒有配置內存最大值,很多時候我們會發現運行SqlServer的系統內存往往居高不下。這是由於他對於內存使用的策略是有多少閑置的內存就佔用多少,直到內存使用慮達到系統峰值時(預留內存根據系統默認預留使用為准,至少4M),才會清除一些緩存釋放少量的內存為新的緩存騰出空間。

這些內存一般都是SqlServer運行時候用作緩存的,例如你運行一個select語句,執行個存儲過程,調用函數;

1.數據緩存:執行個查詢語句,SqlServer會將相關的數據頁(SqlServer操作的數據都是以頁為單位的)載入到內存中來,下一次如果再次請求此頁的數據的時候,就無需讀取磁碟了,大大提高了速度。

2.執行命令緩存:在執行存儲過程,自定函數時,SqlServer需要先二進制編譯再運行,編譯後的結果也會緩存起來,再次調用時就無需再次編譯。

在我們執行完相應的查詢語句,或存儲過程,如果我們不在需要這些緩存,我可以將它清除,DBCC管理命令緩存清除如下:

--清除存儲過程緩存
DBCCFREEPROCCACHE
--註:方便記住關鍵字FREEPROCCACHE可以拆解成FREE(割捨,清除)PROC(存儲過程關鍵字簡寫),CACHE(緩存)
--清除會話緩存
DBCCFREESESSIONCACHE
--註:FREE(割捨,清除)SESSION(會話)CACHE(緩存)
--清除系統緩存
DBCCFREESYSTEMCACHE('All')
--註:FREESYSTEMCACHE
--清除所有緩存
DBCCDROPCLEANBUFFERS
--註:DROPCLEANBUFFERS

『貳』 sql server 2000最大高速緩存是多少

默認是 1.6G
如果操作系統是企業版 的, SQL SERVER 是企業版或者是DATA CENTER 就可以支持大內存,需要開啟SQL SERVER的AWE選項
AWE選項允許SQL SERVER使用 大內存。

配置操作系統支持AWE

要使OS支持AWE,必須在boot.ini 中加入 /pae 參數

鎖定內存頁:要使用AWE,啟動SQLServer服務的帳號必須有內存中鎖定頁Lock Page in Memory的許可權

此策略將確定哪些帳戶可以使用進程將數據保留在物理內存中,從而阻止系統將數據分頁到磁碟的虛擬內存中。
在 SQL Server 2005 中,「鎖定內存頁」選項默認設置為 OFF。如果您具有系統管理員許可權,
則可以使用組策略工具 (gpedit.msc) 手動啟用該選項,並將此許可權指定給正在運行 SQL Server 的帳戶。
開啟SQL SERVER的AWE選項.gpedit.msc->計算機配置->WINDOWS設置->安全設置->
本地策略->用戶許可權分配->內存中鎖定頁面->加入SQL SERVER的啟動帳戶
雖然沒有要求,但我們建議在使用 64 位操作系統時鎖定內存中的頁。
對於 32 位操作系統,在將 AWE 配置為用於 SQL Server 之前,必須授予「鎖定內存頁」許可權。

/*開啟SQL SERVER的AWE,並設置最大內存為5G
sp_configure "show advanced options", 1
RECONFIGURE WITH OVERRIDE
GO
sp_configure "awe enabled", 1
RECONFIGURE WITH OVERRIDE
GO
sp_configure "max server memory", 5120
RECONFIGURE WITH OVERRIDE
GO
*/

設置最大內存要參照系統物理內存,留下一下內存以供其它應用程序使用(如系統是8G內存,SQL可設置為5G)。設置好後重啟伺服器即可。

『叄』 如何減少分頁緩沖池內存在 SQL Server 的 64 位版本

您可以通過鎖定為在物理內存中的緩沖區池分配的內存分頁緩沖池內存的 SQL Server 進程出的防止 Windows 操作系統。您可以通過在內存中的鎖定頁用戶將許可權分配給用戶帳戶用作 SQL Server 服務的啟動帳戶鎖定內存。

注意對於 SQL Server 的 64 位版本,只有 SQL Server 企業版可以使用內存中的鎖定頁用戶許可權。這是適用於 SQLServer 2005 [RTM SP1,SP2,SP3] 和 [RTM 和 SP1] 的 SQL Server 2008年。SQL Server 2008 SP1 累積更新 2 和 SQL伺服器 2005 SP3 累積更新 4 引入了對 SQL Server 標准版以使用鎖定在內存中的頁的用戶許可權的支持。 在 64 位系統上支持鎖定頁面的詳細信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
970070 鎖定頁支持 SQL Server 2005 標准版 64 位系統上,並在 SQL Server 2008年標准版 64 位系統上
若要分配的內存中的鎖定頁的用戶許可權,請執行以下步驟:
單擊開始,然後單擊運行,類型 gpedit.msc然後單擊確定。

注意組策略對話框。
展開ComputerConfiguration,然後再展開Windows 設置。
展開安全設置,然後展開本地策略。
單擊用戶許可權分配中,,然後雙擊鎖定頁 inmemory。
在本地安全策略設置對話框中,單擊添加用戶或組。
在選擇用戶或組對話框中,將該帳戶有權運行 Sqlservr.exe 文件中,添加,然後單擊確定。
關閉組策略對話框。
重新啟動 SQL Server 服務。
分配後內存中的鎖定頁用戶許可權,並且在重新啟動 SQL Server 服務,Windows 操作系統不再出在 SQL Server 中的緩沖池內存的頁處理。但是,Windows 操作系統可以仍然出在 SQL Server 進程內的 nonbuffer 池內存頁。

您可以驗證用戶許可權使用 SQL Server 的實例,應確保在啟動 SQL Server 錯誤日誌中寫入以下的消息:
將鎖定的頁用於緩沖池

『肆』 sqlserver2005怎麼設置內存

SQLSERVER的內存用在哪裡?
SQL會緩存大量的數據頁面,他還會緩存很多其他信息,包括存儲過程的執行計劃 ,特定用戶的安全上下文等
如果這些信息沒有在資料庫中緩存,SQL都要重新計算一遍,花額外的時間,所以SQLSERVER對內存的需求是十分強烈的。

配置:
(1)如果伺服器支持64位操作系統,沒有特殊理由的話,請安裝64位系統。這樣SQL能夠有效地使用 大於2GB的內存。如果一定要用32位系統,務必將SQLSERVER伺服器屬性裡面的「使用AWE分配內存」打開。但是不要用boot.ini文件里的/3GB這個開關,即不要在boot.ini文件里加上/3GB這個參數。

(2)盡量使伺服器專門供資料庫使用,不要將其他服務(例如IIS,中間層應用服務等)安裝在同一台機器上。多個生產應用服務在同一台機器上運行,會大大增加維護成本

(3)建議設置SQLSERVER max server memory(最大伺服器內存),以確保Windows有足夠的內存供系統本身使用。
情況歸納如下:
一台4GB機器,建議預留1GB,設置SQLSERVER max server memory為2.8GB
一台8GB機器,建議預留2GB,設置SQLSERVER max server memory為6GB
一台大於8GB的64位機器,建議預留3GB~4GB
如果一台伺服器上還有其他應用使用內存,也要扣除他們的內存使用數
一般設置SQLSERVER min server memory(最小伺服器內存)意義不大

(4)如果是企業版SQLSERVER,建議賦給SQLSERVER啟動帳號lock page in memory的許可權
設置方法如下:
打開組策略(運行 ,輸入gpedit.msc)-》找到計算機配置-》Windows設置-》安全設置-》本地策略-》用戶許可權分配-》鎖定內存頁
在鎖定內存頁上右鍵,打開鎖定內存頁屬性,添加SQLSERVER啟動帳號進去

(5)「set working set size」 這個SQLSERVER參數在現在的Windows上不能起到固定SQL物理內存的作用,所以請永遠不要使用

修改完配置之後需要重啟SQLSERVER服務才能生效!!!!!

除了配置之外還有一些應對內存錯誤的其他一些建議:
升級Windows2003到SP2,或者使用Windows2008 ,這些版本的Windows的內存管理機制有了調整
升級硬體驅動程序,或者聯系微軟技術服務,幫忙檢查是不是硬體方面問題引起

『伍』 為什麼讀取SQL的資料庫會佔用內存那麼大

因為SQL使用了緩存技術,所以在使用一段時間以後內存佔用會越來越多。

打開企業管理器,在你的SQL伺服器上點右鍵,查看屬性。

在「內存」項中把內存的「最大值」改小一點,不要超過你的內存的一半,或者選中「使用固定的內存大小」,然後將值設定為你內存的一半也可以。

『陸』 如何將SQL Server表駐留內存和檢測

1、DBCCPINTABLE 不會導致將表讀入到內存中。當表中的頁由普通的 Transact-SQL 語句讀入到高速緩存中時,這些頁將標記為內存駐留頁。當 SQL Server 需要空間以讀入新頁時,不會清空內存駐留頁。SQL Server 仍然
記錄對頁的更新,並且如有必要,將更新的頁寫回到磁碟。然而,在使用 DBCC UNPINTABLE 語句使該表不駐留之前
,SQL Server 在高速緩存中一直保存可用頁的復本。

DBCC PINTABLE 最適用於將小的、經常引用的表保存在內存中。將小表的頁一次性讀入到內存中,將來對其數據的所有引用都不需要從磁碟讀入。

注意 DBCC PINTABLE 可以提供性能改進,但是使用時務必小心。如果駐留大表,則該表在開始時會使用一大部分高速緩存,而不為系統中的其它表保留足夠的高速緩存。如果所駐留的表比高速緩存大,
則該表會填滿整個高速緩存。sysadmin 固定伺服器角色的某個成員必須關閉而後重新啟動 SQL Server,然後使表不駐留。
駐留太多的表和駐留比高速緩存大的表會產生同樣的問題。

示例:

Declare@db_idint,@tbl_idint
UseDATABASE_NAME
Set@db_id=DB_ID('DATABASE_NAME')
Set@tbl_id=Object_ID('Department')
DBCCpintable(@db_id,@tbl_id)

可將表Department設置為駐留內存。


Declare@db_idint,@tbl_idint
UseDATABASE_NAME
Set@db_id=DB_ID('DATABASE_NAME')
Set@tbl_id=Object_ID('Department')
DBCCUNpintable(@db_id,@tbl_id)

可將表Department取消設置為駐留內存。

可以使用如下的SQL指令來檢測執行情況:

SelectObjectProperty(Object_ID('Department'),'TableIsPinned')


如果返回結果為1:則表示該表已經設置為駐留內存;0:則表示沒有設置為駐留內存。


2, SP_TableOption
設置用戶定義表祥余伏的選項值。sp_tableoption可以用來打開桌上的文本,在文本行特徵ntext或image列。

語法毀寬
sp_tableoption [ @TableNamePattern = ] 'table'
, [ @OptionName = ] 'option_name'
, [ @OptionValue = ] 'value'

其中,'option_name' 有如下用法:

pintable -- 默認,它標志著該表不再內存居民。啟用時,將表標記為內存駐留(可將指謹攜定的表駐留內存)

另外,table lock on bulk load, insert row lock, text in row等等可選值,因不涉及將表駐留內存,具體用法可以查詢SQL Server Books Online.

Value有如下用法:

the option_name is enabled (true, on, or 1) or disabled (false, off, or 0)

示例:

EXECsp_tableoption'Department','pintable','true'

將數據表Department駐留內存

EXECsp_tableoption'Department','pintable','false'

取消數據表Department駐留內存



可以使用如下的SQL指令來檢測執行情況:

SelectObjectProperty(Object_ID('Department'),'TableIsPinned')



如果返回結果為1:則表示該表已經設置為駐留內存;0:則表示沒有設置為駐留內存。



3. Conclusions

將數據表設置為駐留內存時,並沒有實際將表讀入內存中,直到該表從被檢索。因此,可以使用如下SQL指令進一步將數據表Department駐留內存:

Select*FromDepartment


另外,可以使用如下SQL指令方便顯示/檢測資料庫Database中所有設置為駐留內存的表:

SELECT*FROMINFORMATION_SCHEMA.Tables
WHERETABLE_TYPE='BASETABLE'
ANDOBJECTPROPERTY(object_id(TABLE_NAME),'TableIsPinned')>0

『柒』 sqlserver佔用內存過高,清理辦法

SQL Server對伺服器內存的使用策略是用多少內存就佔用多少內存,只用在伺服器內存不足時,才會釋放一點佔用的內存,所以SQL Server 伺服器內存往往會佔用很高。

Sql Server運行時候的緩存:
1.數據緩存:執行個查詢語句,Sql Server會將相關的數據頁(Sql Server操作的數據都是以頁為單位的)載入到內存中來, 下一次如果再次請求此頁的數據的時候,就無需讀取磁碟了,大大提高了速度。
2.執行命令緩存:在執行存儲過程,自定函數時,Sql Server需要先二進制編譯再運行,編譯後的結果也會緩存起來, 再次調用時就無需再次編譯。

清除緩存的命令(直接執行第四個命令清除所有緩存):
DBCC FREEPROCCACHE --清除存儲過程相關的緩存
DBCC FREESESSIONCACHE --會話緩存
DBCC FREESYSTEMCACHE('All') --系統緩存
DBCC DROPCLEANBUFFERS --所有緩存
注意:清除了緩存,不會釋放SQL Server所佔用的內存,所以需要通過修改SQL Server內存或重啟SQL Server伺服器來釋放內存。

修改SQL Server內存:

優化:使用以下語句查找出什麼語句占內存最高,針對占內存高的語句進行優化
SELECT SS.SUM_EXECUTION_COUNT,
T.TEXT,
SS.SUM_TOTAL_ELAPSED_TIME AS '總和時間',
SS.SUM_TOTAL_WORKER_TIME AS '執行耗時',
SS.SUM_TOTAL_LOGICAL_READS AS '總和邏輯讀數',
SS.SUM_TOTAL_LOGICAL_WRITES AS '總和邏輯寫'
FROM (SELECT S.PLAN_HANDLE,
SUM(S.EXECUTION_COUNT)SUM_EXECUTION_COUNT,
SUM(S.TOTAL_ELAPSED_TIME)SUM_TOTAL_ELAPSED_TIME,
SUM(S.TOTAL_WORKER_TIME)SUM_TOTAL_WORKER_TIME,
SUM(S.TOTAL_LOGICAL_READS)SUM_TOTAL_LOGICAL_READS,
SUM(S.TOTAL_LOGICAL_WRITES)SUM_TOTAL_LOGICAL_WRITES
FROM SYS.DM_EXEC_QUERY_STATS S
GROUP BY S.PLAN_HANDLE
) AS SS
CROSS APPLY SYS.dm_exec_sql_text(SS.PLAN_HANDLE)T
ORDER BY SUM_TOTAL_LOGICAL_READS DESC

轉自: https://www.cnblogs.com/LuoEast/p/8398406.html

『捌』 sql server 2015一般需要多少內存

默認情況下,SQL Server 會依據可獲得的系統資源動態改變它的內存需求。如果 SQL Server 需要更多的內存,它會要求操作系統確定是否有空閑的物理內存可用,並使用可用的內存。若 SQL Server 不再需要當前分配給它的內存,它就將內存釋放給操作系統。當 SQL Server 動態使用內存時,它要求系統定期地檢測可用的物理內存數量。SQL Server 根據伺服器活動增大或收縮高速緩沖存儲器,以使可用物理內存保持在 4 MB 到 10 MB 之間。這就避免了系統進行換頁操作。 [也就是說,這種情況下SQL SERVER 本身不會使物理可用內存小於4M,如果比較長的時間內都小於4M的話,則要看一下是不是該伺服器上其它應用程序有問題] 第二種情況:限制使用內存 使用 set working set size 為sql server保留等於伺服器內存設置的物理內存空間。即使是sql server 進程此時是空閑的,系統也不會將 SQL Server 頁交換出去。 使用min server memory 保證sql server 使用的最小內存。SQL Server 啟動時不立即分配 min server memory 中所指定的內存量。但是,當內存使用由於客戶端負荷而達到該值後,SQL Server 將無法從已分配的緩沖池中釋放內存。 使用max server memory 則防止 SQL Server 使用多於指定數量的內存,這樣剩餘的可用內存可以快速運行其它應用程序。SQL Server 啟動時不立即分配 max server memory 中所指定的內存。內存使用隨 SQL Server 的需要而增長,直到達到 max server memory 中所指定的值。SQL Server 無法超過該內存使用值,除非增加 max server memory 值。 第一種情況比較適用於伺服器專做sql server伺服器的情況,第二種情況適用於為在同一台計算機上運行的其它應用程序保留一定的內存以便於快速響應。(另:如果想動態分配sql server 的內存,則不要設置set working set size 選項,使用默認值即可。至於這些參數如何設置參見另外的文檔) 監視 SQL Server 所使用的內存和計數器有助於確定: 是否由於缺少可用物理內存存儲高速緩存中經常訪問的數據而導致瓶頸存在。如果是這樣,SQL Server 必須從磁碟檢索數據。 是否可通過添加更多內存或使更多內存可用於數據高速緩存或 SQL Server 內部結構來提高查詢性能。 SQL Server 需要從磁碟讀取數據的頻率。與其它操作相比,例如內存訪問,物理 I/O 會耗費大量時間。盡可能減少物理 I/O 可以提高查詢性能。 對sql server伺服器內存的監視: Memory:Available Bytes 計數器表示當前進程可使用的物理內存位元組數。 如果小於4M或更小,說明計算機上總的內存可能不足,或某個程序沒有釋放內存 ● Memory: Page Faults / sec 每秒軟性頁面失效的數目(包括有些可以直接在內存中滿足而有些需要從硬碟讀取)較page/sec只表明數據不能在內存指定工作集中立即使用。 如果該值偶爾走高,表明當時有線程競爭內存。如果持續很高,則內 存可能是瓶頸。 Memory:Pages/sec 計數器表示由於缺頁處理而從磁碟取回的頁數,或由於缺頁處理而寫入磁碟以釋放工作集空間的頁數。 ● Page Reads/sec 每秒發出的物理資料庫頁讀取數。這一統計信息顯示的是在所有資料庫間的物理頁讀取總數。由於物理 I/O 的開銷大,可以通過使用更大的數據高速緩存、智能索引、更高效的查詢或者改變資料庫設計等方法,使開銷減到最小。 ● Page Writes/sec 所發出的物理資料庫頁寫入的數目。