如何查看磁盤I/O操作信息
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供鏡湖企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、做網(wǎng)站、H5網(wǎng)站設(shè)計、小程序制作等業(yè)務(wù)。10年已為鏡湖眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。
SET
STATISTICS
IO
ON
命令是一個
使
SQL
Server
顯示有關(guān)由
Transact-SQL
語句生成的磁盤活動量的信息。
我們在分析索引性能的時候,會非常有用。
啟用了這個屬性后,我們在執(zhí)行
SQL
語句后,會收到類似如下的信息,這有利于我們分析SQL的性能:
(3999
row(s)
affected)
表
'ChargeCL'。掃描計數(shù)
1,邏輯讀取
9547
次,物理讀取
次,預(yù)讀
次,lob
邏輯讀取
次,lob
物理讀取
次,lob
預(yù)讀
次。
其中的
lob
邏輯讀取、lob
物理讀取、lob
預(yù)讀
這三個指標是
讀取
text、ntext、image
或大值類型
(varchar(max)、nvarchar(max)、varbinary(max))
時的指標。
而
邏輯讀取、物理讀取、預(yù)讀
是對普通數(shù)據(jù)頁的讀取。
使用
SQL
Server
Management
Studio
Standard
Reports
我們在
SQL
Server
Management
Studio
中,選擇數(shù)據(jù)庫服務(wù)器,或者具體數(shù)據(jù)庫,或者Security
--
Logins
時,或者Management
時,Notification
Services
或者
SQL
Server
Agent
對象時候,都會看到SQL
Server
替我們提供的一些現(xiàn)成報表,這些報表的數(shù)據(jù),有利于我們分析數(shù)據(jù)庫的狀態(tài)。
比如在
SQL
Server
索引基礎(chǔ)知識(1)---
記錄數(shù)據(jù)的基本格式
中,我們就使用數(shù)據(jù)表占用空間的報表
具體報表可以參考以下鏈接:
SQL
Server
Management
Studio
Standard
Reports
-
Overview
測試中,釋放緩存的一些方法
尤其查詢語句性能測試時,數(shù)據(jù)是否被緩存,這是測試中一個重要點。下面幾個命令幫助我們清除緩存。方便測試。
清除緩存有關(guān)的命令:
SQL
2000里面除了dbcc
unpintable好像就沒有了
而且這個操作也不會立即釋放表內(nèi)存Buffer
(DBCC
UNPINTABLE
does
not
cause
the
table
to
be
immediately
flushed
from
the
data
cache.
It
specifies
that
all
of
the
pages
for
the
table
in
the
buffer
cache
can
be
flushed
if
space
is
needed
to
read
in
a
new
page
from
disk.)
SQL
2005/2008讓DBA能夠更自由的對SQL所占用的內(nèi)存空間做處理
如:
CHECKPOINT
將當前數(shù)據(jù)庫的全部臟頁寫入磁盤?!芭K頁”是已輸入緩存區(qū)高速緩存且已修改但尚未寫入磁盤的數(shù)據(jù)頁。CHECKPOINT
可創(chuàng)建一個檢查點,在該點保證全部臟頁都已寫入磁盤,從而在以后的恢復(fù)過程中節(jié)省時間。
DBCC
DROPCLEANBUFFERS
從緩沖池中刪除所有清除緩沖區(qū)。
DBCC
FREEPROCCACHE
從過程緩存中刪除所有元素。
DBCC
FREESYSTEMCACHE
從所有緩存中釋放所有未使用的緩存條目。SQL
Server
2005
數(shù)據(jù)庫引擎會事先在后臺清理未使用的緩存條目,以使內(nèi)存可用于當前條目。但是,可以使用此命令從所有緩存中手動刪除未使用的條目。
另外還可以
sp_cursor_list
查看全部游標
DBCC
OPENTRAN查看數(shù)據(jù)庫打開事務(wù)狀態(tài)等
數(shù)據(jù)緩存和執(zhí)行緩存的控制。
SQLServer占用的內(nèi)存主要由三部分組成:數(shù)據(jù)緩存(DataBuffer)、執(zhí)行緩存(ProcedureCache)、以及SQLServer引擎程序。SQLServer引擎程序所占用緩存一般相對變化不大,則我們進行內(nèi)存調(diào)優(yōu)的主要著眼點在數(shù)據(jù)緩存和執(zhí)行緩存的控制上。
SQL語句在執(zhí)行前首先將被編譯并通過查詢優(yōu)化引擎進行優(yōu)化,從而得到優(yōu)化后的執(zhí)行計劃,然后按照執(zhí)行計劃被執(zhí)行。對于整體相似、僅僅是參數(shù)不同的SQL語句,SQLServer可以重用執(zhí)行計劃。但對于不同的SQL語句,SQLServer并不能重復(fù)使用以前的執(zhí)行計劃,而是需要重新編譯出一個新的執(zhí)行計劃。同時,SQLServer在內(nèi)存足夠使用的情況下,此時并不主動清除以前保存的查詢計劃。這樣,不同的SQL語句執(zhí)行方式,就將會大大影響SQLServer中存儲的查詢計劃數(shù)目。如果限定了SQLServer最大可用內(nèi)存,則過多無用的執(zhí)行計劃占用,將導(dǎo)致SQLServer可用內(nèi)存減少,從而在執(zhí)行查詢時尤其是大的查詢時與磁盤發(fā)生更多的內(nèi)存頁交換。如果沒有限定最大可用內(nèi)存,則SQLServer由于可用內(nèi)存減少,從而會占用更多內(nèi)存。
sql server 在查詢大數(shù)據(jù)量的數(shù)據(jù)時,總會占用大量的內(nèi)存,并且居高不下,一不小心就會死機。
下面這個是我從網(wǎng)上找到的:
當你查詢數(shù)據(jù)的數(shù)據(jù)量比較大時,sqlserver會把查詢結(jié)果緩存在內(nèi)存中,保證你下次查詢同樣的記錄時會很快得到結(jié)果,所以內(nèi)存使用量會激增。
在你完成此次查詢后,sqlserver不會馬上釋放內(nèi)存,數(shù)據(jù)會仍然放在內(nèi)存中,這是sqlserver的優(yōu)化策略,sqlserver會不斷地占用你的系統(tǒng)內(nèi)存,來加快sqlserver的運行速度,當你的系統(tǒng)中的其它服務(wù)也需要內(nèi)存時,它才會自動釋放部分內(nèi)存。一句話,sqlserver不會讓你的系統(tǒng)有閑置的內(nèi)存,除非你設(shè)置sqlserver的最大內(nèi)存使用量。這樣也沒什么不好,如果你的系統(tǒng)很大,單獨給sqlserver一臺機器,這樣會提高它的性能。
如果你只是開發(fā)用,要想讓sqlserver釋放內(nèi)存,重啟sqlserver的服務(wù)就行了。如果不想讓sqlserver占用太多內(nèi)存,設(shè)置sqlserver的最大內(nèi)存占用量.
設(shè)置最大內(nèi)存后效果好了不少!
他的高速緩存是用來存儲sql信息,以及最近使用數(shù)據(jù),減少磁盤IO的作用,提高存儲讀寫速度的; 一般web網(wǎng)站中,需要用到數(shù)據(jù)檢索的查詢sql緩存 新手的話沒關(guān)系,一般多看看他們的產(chǎn)品資料即可;sql有很多在線幫助;