① sql吃內存的問題,不管你的內存有多大,sql總是能佔用你90+%的內存,增加了內存,他還是佔用90+%的內存!
可以配置使用內存。
登錄SQL Server Management Studio
在實例名上右鍵-屬性-內存
在配置值中配置最大伺服器內存。
② sql資料庫佔用內存太大如何處理
sql server沒有辦法釋放內存,內存都是系統自動管理的
除非你殺調哪些佔用內存大的進程
sql 語句沒寫好,死鎖...都會導致佔用內存很大
select * from master..sysprocesses
kill spid --spid 就是上面查到的spid欄位
③ sql占內存太大,怎樣設置對sql的內存限制
在 SERIAL 對象預設插入後你可以用函數 currval() 檢索剛賦值的 SERIAL 值例如:
SELECT currval('person_id_seq')
使用 currval() 不會導致和其他用戶的沖突情況,因為currval() 返回的是你本次會話進程所賦的值而不是所有用戶的當前值。
④ 如何查看 SQL Server 佔用內存
SQL語句本身佔用的內存,好象沒有吧。SQL語句執行過程的狀態,可以使用語句:
SELECT s2.dbid,
s1.sql_handle,
(SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,
( (CASE WHEN statement_end_offset = -1
THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)
ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,
execution_count,
plan_generation_num,
last_execution_time,
total_worker_time,
last_worker_time,
min_worker_time,
max_worker_time,
total_physical_reads,
last_physical_reads,
min_physical_reads,
max_physical_reads,
total_logical_writes,
last_logical_writes,
min_logical_writes,
max_logical_writes
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
WHERE s2.objectid is null
ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;
⑤ 如何手動設置SQL server的最大內存佔用
sql server默認是無限制佔用內存的,SQL Server 根據伺服器的活動來增大或收縮緩沖區高速緩存,以使可用物理內存保持在 4 MB 到 10 MB 之間。
手動設置 SQL Server 內存選項有兩種主要方法:
第一種方法,將 min server memory 和 max server memory 設置為同一值。此值與達到該值後分配給 SQL Server 緩沖池的固定內存量相對應。
第二種方法,將 min server memory 和 max server memory 設置成一個內存范圍。這種方法在系統或資料庫管理員希望配置 SQL Server 實例,同時又要考慮在同一台計算機上運行的其他應用程序的內存需求時很有用。
http://www.cnblogs.com/tannaiyin/archive/2009/04/19/1439077.html
⑥ sql server 屬性配置最大內存設為多少合適
SQL Server 使用內存有兩種情況:
第一種情況: 動態改變它的內存需求。
默認情況下,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
所發出的物理資料庫頁寫入的數目。
監視 SQL Server 正在使用的內存量:
Process:Working Set
計數器表示的是一個進程所佔用的內存數量。
若這一數值持續低於 SQL Server 配置使用的內存數量(由"最小伺服器內存"和"最大伺服器內存"伺服器選項設置,( min server memory 的默認設置為 0,max server memory 的默認設置為 2147483647。),則表示 SQL Server 所配置的內存比它所需要的多。否則,用"設置工作集大小"伺服器選項修改工作集大小。
[在設置了sql server 使用的最小 和 最大內存後,查看此參數比較有意義。如果沒有設置sql server 內存使用范圍,則該值可以與系統總的內存比較,設置分配給sql server 的最大最小內存分配的是物理內存+虛擬內存的一部分]
● SQL Server:Buffer Manager:Buffer Cache Hit Ratio
數據請求可以從數據緩沖區中獲得所需數據的成功率
計數器值依應用程序而定,但比率最好為 90% 或更高。增加內存直到這一數值持續高於 90%,表示 90% 以上的數據請求可以從數據緩沖區中獲得所需數據。
● SQL Server:Buffer Manager: Total Pages
緩沖區池中頁的數目(包括資料庫、可用頁和被盜用頁)
若 Total Server Memory (KB) 計數器值與計算機的物理內存大小相比一直很高,可能表示需要更多的內存
結論:
對sql server 伺服器內存的監視,可以看出該伺服器整體的內存的佔用情況
對 sql server 使用內存的監視, 可以看出是否是sql server 使用了大多數內存
根據監視的結果確定是否是內存不夠。
其它:
內存相關參數調整(見後面)
SQL Server 對象內存使用情況說明(見後面)
疑問:
使用 set working set size =1 後,系統是在sql server 啟動時就分配給它要求的內存 還是 開始不分配這么多,而是等到用了這么多之後不釋放就行了?
SQL Server 對象內存使用情況說明
下表列出 Microsoft® SQL Server™ 中不同對象的內存使用量。下表中的信息不適用於 Microsoft® SQL Server 2000™ Windows® CE 版。
對象大小
對象 SQL Server 7.0 SQL Server 2000
鎖 96 位元組 每個所有者 64 位元組外加 32 位元組。
開放式資料庫 2.880 位元組 每個文件 3924 位元組外加 1640 位元組,每個文件組 336 位元組。
開放式對象1 276 位元組 每個對象上打開的索引 256 位元組外加 1724 位元組2。
用戶聯接 12 KB +(3 * 網路數據包大小)3。 12 KB +(3 * 網路數據包大小)3。
3 開放式對象包括所有的表、視圖、存儲過程、擴展存儲過程、觸發器、規則、默認值及約束。
2 在表或視圖上可以打開索引。
3 網路數據包大小是表格格式數據方案 (TDS) 數據包的大小,該數據包用於應用程序和關系資料庫引擎之間的通訊。默認的數據包大小為 4 KB,由 network packet size 配置選項控制。
內存相關:
伺服器虛擬內存的配置
頁面文件和物理內存或RAM構成虛禮內存
虛擬內存設置方法:
啟動"控制面板"的"系統"選項,然後選擇"虛擬內存"按鈕來創建一個附加的頁面文件或增加當前頁面文件的大小。
虛擬內存不足:
當伺服器上運行的應用程序請求的內存超過伺服器上可用的內存時,Microsoft® Windows® 打開"伺服器進程 — 虛擬內存用完"對話框,其文本如下所示:
系統的虛擬內存已經不足。請關閉一些應用程序。可以啟動"控制面板"的"系統"選項,然後選擇"虛擬內存"按鈕來創建一個附加的頁面文件或增加當前頁面文件的大小。
一般情況下,將虛擬內存大小設置為計算機中安裝的物理內存的 1.5 倍
如果另外安裝了全文檢索功能,並打算運行 Microsoft 搜索服務以便執行全文索引和查詢,可考慮:
將虛擬內存大小配置為至少是計算機中安裝的物理內存的 3 倍。
● 將 SQL Server max server memory 伺服器配置選項配置為物理內存的 1.5 倍(虛擬內存大小設置的一半)。
如考慮其它服務需要的虛擬內存,則配置 SQL Server max server memory 選項,使得留有足夠的虛擬內存滿足全文檢索內存需求。全部虛擬內存 -(SQL Server 最大虛擬內存 + 其它服務需要的虛擬內存)>= 1.5 倍物理內存。
Sql server 使用的內存參數的配置:
手工配置給 SQL Server 多於物理內存數量的虛擬內存會導致性能較低。默認情況下,SQL Server 能夠可用系統資源動態改變它的內存需求。min server memory 的默認設置為 0,max server memory 的默認設置為 2147483647。可以為 max server memory 指定的最小內存量為 4 MB。
作用:如果在運行 SQL Server 實例的計算機上頻繁啟動或停止其它應用程序,啟動這些應用程序所需的時間可能會因 SQL Server 實例分配和釋放內存而延長。另外,如果 SQL Server 是幾個在一台計算機上運行的伺服器應用程序中的一個,系統管理員可能需要控制分配給 SQL Server 的內存量。在這些情況下,可以使用 min server memory 和 max server memory 選項控制 SQL Server 可以使用的內存量。
對SQL Sserver 使用內存的配置主要是對以下三個參數進行配置:
min server memory 保證了 SQL Server 實例使用的最小內存量。
max server memory 則可防止 SQL Server 使用多於指定數量的內存,這樣剩餘的可用內存可以快速運行其它應用程序。
set working set size 為 SQL Server 保留等於伺服器內存設置的物理內存空間。
手工設置 SQL Server 內存選項有兩種主要方法:
第一種方法,設置 min server memory 和 max server memory 為同一數值。該數值與分配給 SQL Server 的固定內存量相對應。
● 第二種方法,把 min server memory 和 max server memory 數量設置到一個范圍段內。這種方法在系統或資料庫管理員希望配置 SQL Server 實例,使其適應在同一台計算機上運行的其它應用程序的內存需求時很有用。
如果只設置了min server memory 和 max server memory ,sql server 使用的內存值在最小和最大值之間變動(如果sql server 使用的值超過過最小值的話)
如果設置set working set size =1,必須先將min server memory 和 max server memory的值設成同一個值,這個值就是為sql server 保留的物理內存空間。即使當 SQL Server 空閑,另一個進程可以使用 SQL Server 頁時,系統也不會將 SQL Server 頁交換出去。
參數的設置方法:
1. 在查詢分析器中運行 [要先運行下面的語句,否則內存頁面打不開]
use master
exec sp_configure 'show advanced option','1'
2. 在企業管理器中配置,步驟:
打開Sql Server 屬性配置,選擇內存頁面,然後在裡面配置就行了。
(不過這里用圖形界面配置內存的時候好像不能超過物理內存的大小,可以用命令來分配大於物理內存的內存空間,下面有簡單的介紹。 )
對上圖的說明:
動態配置 SQL Server 內存
指定在更改伺服器屬性之後立即配置 Microsoft® SQL Server™ 內存。
使用固定的內存大小
為 SQL Server 指定固定的內存大小。
為 SQL Server 保留物理內存
為 SQL Server 保留與內存設置相等的物理內存空間。這意味著 Microsoft Windows NT® 4.0 或 Windows® 2000 不會將 SQL Server 頁交換出去,即使當 SQL Server 閑置時可以更容易地使用這些頁。
最小查詢內存
設置可以分配給每個用戶執行查詢的最小內存大小。默認為 1024 KB。
配置值[顯示現在配置的值,不做其它用途]
查看或更改此選項卡上的選項的配置值。如果更改了這些值,單擊"運行值"查看更改是否已生效。如果沒有,必須重新啟動 SQL Server 實例才能使更改生效。
運行值[顯示現在運行值,不做其它用途]
查看此選項卡上的選項的當前運行值。這些值為只讀值。
另:如果要用命令來設置比較麻煩。如下簡單舉個例子:
Set working set size 設置方法:
set working set size 是一個高級選項。如果要用 sp_configure 系統存儲過程改變該選項,必須把 show advanced options 設置為 1,該選項在停止並重新啟動伺服器後生效。
設置 show advanced options 設置為 1,在查詢分析器中運行以下命令:
use master
exec sp_configure 'show advanced option','1'
如果成功,會返回如下結果:
DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯系。
已將配置選項 'show advanced options' 從 1 改為 1。請運行 RECONFIGURE 語句以安裝。
設置set working set size =1,運行如下命令:
use master
exec sp_configure 'set working set size','1'
如果成功,會返回如下結果:
DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯系。
已將配置選項 'set working set size' 從 0 改為 1。請運行 RECONFIGURE 語句以安裝。
…………………………………………
Cache Hit Ratio(高速緩存命中率,所有Cache」的命中率。在SQL Server中,Cache可以包括Log Cache,Buffer Cache以及Procere Cache,是一個總體的比率。) 高速緩存命中次數和查找次數的比率。對於查看SQL Server高速緩存對於你的系統如何有效,這是一個非常好的計數器。如果這個值很低,持續低於80%,就需要增加更多的內存。
設置架構高速緩存:
架構高速緩存可顯著提高 XPath 查詢的性能。當對帶批註的 XDR 架構執行 XPath 查詢時,架構存儲在內存中,而必要的數據結構內置在內存中。如果設置了架構高速緩存,架構仍保留在內存中,因而提高了後續 Xpath 查詢的性能。
解釋:
架構-SCHEMA
CREATE SCHEMA
創建一個架構,並且可以在概念上將其看作是包含表、視圖和許可權定義的對象。
CREATE SCHEMA 提供了在單個語句中創建表、視圖以及授予對象許可權的方法。如果在創建任何對象或授予任何許可權(這些是在 CREATE SCHEMA 語句中指定的)時發生錯誤,則不會創建任何對象。
XPath查詢-Xpath(XML Path 語言)是一種圖形導航語言
個人理解簡單的說就是在URL中指定查詢。[詳細知識參照sql server 聯機幫助文檔]
設置方法:
可通過在注冊表中添加下列鍵來設置架構高速緩存的大小:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXMLX\SchemaCacheSize。
[我在注冊表中沒找到位置!?]
根據可用內存和要使用的架構數設置架構大小。默認的架構高速緩存大小為 31。如果設置更高的架構高速緩存大小,需使用更多的內存。因此,如果架構訪問速度慢,可增加高速緩存大小,如果內存少則可減小高速緩存的大小。
出於性能方面的考慮,建議將架構高速緩存的大小設得比通常所用的映射架構數多。當架構數增加時,如果架構高速緩存的大小比所擁有的架構數少,性能會降低。
⑦ 怎麼看SQL執行消耗了多少內存怎麼釋放SQL消耗的資源
sql 消耗的資源不能釋放。SQL會把數據放在內存上,這樣下次再使用這些數據時,就不需要從硬碟上讀取了,加快速度。
⑧ sql佔用內存瞬間爆滿
在SQL2008會把整個資料庫緩存到內存裡面,就是說你資料庫有多大,就會占內存多個空間,直到把內存占滿,你可以限制SQL 內存
首先我們需要登錄 sql server 2005的資源管理器
滑鼠右擊我們sql server 2005的伺服器,然後選擇「屬性」選項
找到指定資料庫伺服器的屬性中的「內存」屬性,並點擊
接下來就是配置資料庫內存了
http://jingyan..com/article/fedf07377c353f35ac8977f8.html
⑨ 如何讓sqlserver2000使用8G 大內存
http://technet.microsoft.com/zh-cn/library/ms190673.aspx
⑩ 為什麼SQL Server使用很少的內存
為什麼SQL Server使用很少的內存
昨天論壇里邊看到一個帖子,說SQL Server的內存一直上不去。從Task Schele中看到SQL Server只使用了88MB內存,實際這台機器有12GB的內存,可用內存有超過8GB。
www.2cto.com
當時我以為是開啟了AWE導致的,所以連接到他的伺服器看了一下。但是資料庫為2005企業版64位,所以不用開啟AWE。而且即使開啟了,也會被忽略。
使用下面的腳本查詢了一下SQL Server內存使用:
select physical_memory_in_use_kb,locked_page_allocations_kb,*fromsys.dm_os_process_memory
看到實際使用的內存有2GB,遠遠超出任務管理器看到的。(也可以通過Perfmon的Total server memory(MB)查看)。
www.2cto.com
當時覺得很奇怪,查看了SQL Server錯誤日誌發現了類似下面的信息:
2009-06-0412:21:08.16 Server Large Page Extensions enabled.
2009-06-04 12:21:08.16 Server Large Page Granularity: 2097152
2009-06-04 12:21:08.21 Server Large Page Allocated: 32MB
猜測這台期間開啟了Lock Pages In memory功能,之後得到確認。因為開啟Lock Pages In memory之後,SQL Server會使用AWE APIs鎖定內存頁,所以這部分的內存使用不會顯示在Working Set中。
So in summary the AWE APIs for 32bit and 64bit SQL Server systems are used for different purposes. In 32bit it is really to extend memory access beyond 4Gb or to enable the AWE feature. For 64bit systems, it is to possibly gain performance and to 「lock pages」 for the buffer pool.
到現在這個問題就比較明朗了,其實SQL Server還是正常工作的。一般查詢SQL Server的使用還是建議使用DMV或者Perfmon,直接查看Working Set信息可能不準。
另外說一下,當時看到上面Large Page的信息,以為是資料庫開啟了LargePage,但是使用DBCC TRACSTATUS查看沒有開啟834 Trace Flag,所以大數據功能是沒有啟用的。只有開啟834 Trace Flag資料庫才會真正啟用Large Page。
啟用Large page在資料庫錯誤日誌會看到類似信息:
2009-06-0414:20:40.03 Server Using large pages for buffer pool.
關於Lock Pages In memory/working set機制我找到了兩篇文章,大家有興趣可以參考:
<a href="http://blogs.msdn.com/b/psssql/archive/2009/06/05/sql-server-and-large-pages-explained.%3Ca%20href=" kf="" web="" asp="" "="" target="_blank" class="keylink" style="color: rgb(51, 51, 51); text-decoration: none;">aspx" target="_blank">Funwith Locked Pages, AWE, Task Manager, and the Working Set
WhySQL Server is using so LESS memory