❶ 如何手動設置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
❷ 如何設置SQLServer資料庫內存
1、打開SQL Sever 2008 R2資料庫
❸ redis怎麼緩存sql數據
利用redis做緩存伺服器來緩解資料庫查詢壓力是非常有效也是非常有必要的, 當用戶第一次點擊頁面的時候查詢資料庫, 然後將查詢結果緩存在redis伺服器中,緩存時間隨你的數據改變時間而定,這樣可大大降低資料庫壓力;下面是具體函數方法;
public function getSqlVal(){
//獲取參數列表,這個參數隨你需求而定,一般可能需要傳入dbname,查詢方式如fetchAll,查詢語句等
$argv = func_get_args();
//假設這里現在只傳入dbName和sql語句
$dbName = $argv[0];
$sql = $argv[1];
//現在把這個參數列表轉成md5之後作為存redis的key值
$md5SqlKey = MD5(serialize($argv));
//下面通過一個redis函數來進行存取數據
$res = getRedisData($md5SqlKey);
//如果取到數據,說明已經緩存在redis伺服器中, 直接取數據就好, 如果沒有數據, 則再去資料庫查詢數據,再講查詢的數據存在redis伺服器中
if(!empty($res)) {
return $res;
}
//後面是查詢資料庫操作,查詢結果返回在$res中
getRedisData($md5SqlKey,$res); //講返回結果存在redis中
return $res;
}
public function getSqlVal(){
//獲取參數列表,這個參數隨你需求而定,一般可能需要傳入dbname,查詢方式如fetchAll,查詢語句等
$argv = func_get_args();
//假設這里現在只傳入dbName和sql語句
$dbName = $argv[0];
$sql = $argv[1];
//現在把這個參數列表轉成md5之後作為存redis的key值
$md5SqlKey = MD5(serialize($argv));
//下面通過一個redis函數來進行存取數據
$res = getRedisData($md5SqlKey);
//如果取到數據,說明已經緩存在redis伺服器中, 直接取數據就好, 如果沒有數據, 則再去資料庫查詢數據,再講查詢的數據存在redis伺服器中
if(!empty($res)) {
return $res;
}
//後面是查詢資料庫操作,查詢結果返回在$res中
getRedisData($md5SqlKey,$res); //講返回結果存在redis中
return $res;
}
❹ sql怎麼獲得資料庫緩存空間大小
其實只要使用系統內置的存儲過程sp_spaceused就可以得到表的相關信息
如:sp_spaceused 'tablename'
以下是為了方便寫的一個存儲過程,目的是把當前的所有表的相關信息全部都保存在一個指定的表裡面
CREATE PROCEDURE get_tableinfo AS
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table tablespaceinfo --創建結果存儲表
(nameinfo varchar(50) ,
rowsinfo int , reserved varchar(20) ,
datainfo varchar(20) ,
index_size varchar(20) ,
unused varchar(20) )
delete from tablespaceinfo --清空數據表
declare @tablename varchar(255) --表名稱
declare @cmdsql varchar(500)
DECLARE Info_cursor CURSOR FOR
select o.name
from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1
and o.name not like N'#%%' order by o.name
OPEN Info_cursor
FETCH NEXT FROM Info_cursor
INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
execute sp_executesql
N'insert into tablespaceinfo exec sp_spaceused @tbname',
N'@tbname varchar(255)',
@tbname = @tablename
FETCH NEXT FROM Info_cursor
INTO @tablename
END
CLOSE Info_cursor
DEALLOCATE Info_cursor
GO執行存儲過程
exec get_tableinfo
查詢運行該存儲過程後得到的結果
select *
from tablespaceinfo
order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc
❺ 如何開啟SQLSERVER資料庫緩存
他的高速緩存是用來存儲sql信息,以及最近使用數據,減少磁碟IO的作用,提高存儲讀寫速度的; 一般web網站中,需要用到數據檢索的查詢sql緩存 新手的話沒關系,一般多看看他們的產品資料即可;sql有很多在線幫助;
❻ 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的內存管理機制有了調整
升級硬體驅動程序,或者聯系微軟技術服務,幫忙檢查是不是硬體方面問題引起
❼ navicate執行sql後會有緩存
有緩存的。
在使用資料庫的時候,我們可能需要導入創建表的SQL文件執行,執行之後是有緩存的。打開電腦上的Navicat,點擊左側的連接,在下拉選項中選擇你是用的資料庫,然後相應的信息,例如用戶名,用戶密碼,連接名,創建就完成了。
❽ sql配置緩存大小原因
數據緩存和執行緩存的控制。
SQLServer佔用的內存主要由三部分組成:數據緩存(DataBuffer)、執行緩存(ProcereCache)、以及SQLServer引擎程序。SQLServer引擎程序所佔用緩存一般相對變化不大,則我們進行內存調優的主要著眼點在數據緩存和執行緩存的控制上。
SQL語句在執行前首先將被編譯並通過查詢優化引擎進行優化,從而得到優化後的執行計劃,然後按照執行計劃被執行。對於整體相似、僅僅是參數不同的SQL語句,SQLServer可以重用執行計劃。但對於不同的SQL語句,SQLServer並不能重復使用以前的執行計劃,而是需要重新編譯出一個新的執行計劃。同時,SQLServer在內存足夠使用的情況下,此時並不主動清除以前保存的查詢計劃。這樣,不同的SQL語句執行方式,就將會大大影響SQLServer中存儲的查詢計劃數目。如果限定了SQLServer最大可用內存,則過多無用的執行計劃佔用,將導致SQLServer可用內存減少,從而在執行查詢時尤其是大的查詢時與磁碟發生更多的內存頁交換。如果沒有限定最大可用內存,則SQLServer由於可用內存減少,從而會佔用更多內存。
❾ 如何設置資料庫緩存
內存資料庫有現成的redis,高效存取鍵值對,鍵設為你的查詢條件,值設為你的查詢結果轉為字元串
查詢時先從redis取,沒有再查資料庫,並且設置redis的過期時間,這種方式需要項目對實時性要求不高,這樣你才能用緩存,而且如果你的項目沒有明顯的熱點,即沒有某些內容確定會多次被查到,那你緩存就不會命中,添加緩存反而影響你得速度
redis是一種nosql的內存資料庫,感興趣你可以了解一下,優點就是性能強勁
數據查詢請求多就把結果緩存下來,你查資料庫再快也沒有直接把結果從內存讀出來快
同樣的sql請求只有第一次查資料庫,之後通通讀內存
或者你乾脆藉助這種思想,創建一個全局的map對象,然後查詢條件作key
,結果作value,就省去了了解redis的過程,把整個資料庫裝內存不太科學,你有多少條數據啊
❿ 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