台灣最大程式設計社群網站
線上人數
1805
 
會員總數:246227
討論主題:189787
歡迎您免費加入會員
討論區列表 >> MS SQL >> 為什麼total_logical_reads多就代表效能差呢?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
為什麼total_logical_reads多就代表效能差呢?
價值 : 50 QP  點閱數:1989 回應數:9
樓主

荔枝
中級專家
2677 787
10036 2628
發送站內信

捐贈 VP 給 荔枝
在sys.dm_exec_query_stats中的「total_logical_reads」常被人用來當做查看秏用IO高低的指標,

但是,total_logical_reads高,那應該只是代表「很常被使用」而已吧?------卻為什麼被人拿來代表「效能差」的指標呢?

「常被使用」和「效能差」有何關係,這點我一直搞不懂!

請教大家,謝謝

搜尋相關Tags的文章: [ 效能 ] ,
本篇文章發表於2015-09-25 12:15
1樓
回應

pilipala
檢舉此回應

total_logical_reads / execution_count (總數 / 執行次數) 才是判斷效能的指標才對吧
本篇文章回覆於2015-09-25 13:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

荔枝
捐贈 VP 給 荔枝 檢舉此回應
謝謝pilipala大大的指導,

我發現或許是我自己誤解了「logical reads」的意義,

在MSDN上是這樣寫的:

這個計畫在編譯以來執行所執行的邏輯讀取總數

我後來自己的理解為:

要在記憶體快取中讀多少次才能找到所需的資料。

所以,當然是數值越大,效能就越差!

如果我的理解是對的,那我真的覺得MSDN總是寫得「很文言文」,總覺得很多知識都只是「因誤解而看起來很難」.....
本篇文章回覆於2015-09-25 14:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

pilipala
檢舉此回應

荔枝大的解釋是正確的阿,但名詞和解釋對應錯而已
logical reads => 要在記憶體快取中讀多少次才能找到所需的資料。
sys.dm_exec_query_stats 的 total_logical_reads => 這個計畫在編譯以來執行所執行的邏輯讀取"總數"
本篇文章回覆於2015-09-25 15:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

荔枝
捐贈 VP 給 荔枝 檢舉此回應
謝謝pilipala大大,我知道那是指「總數」,

不過我還有一個更搞不懂,那就是「total_logical_writes」,

MSDN上是寫: 這個計畫在編譯以來執行所執行的邏輯寫入總數

我不明白的地方,還是在於它的「意義」,以下清楚表達我的疑問:

一: 為什麼對應的SQL語法是SELECT,它卻也有「total_logical_writes」?

二: 為什麼對應的SQL語法是UPDATE,「total_logical_writes」有時候卻是0 ?

我覺得既然會出現以上兩點的事實,那就代表「我一定又誤解它的意思了」!!

所以,想請教大家,它的真實意思是什麼呢?

謝謝
本篇文章回覆於2015-09-25 17:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

pilipala
檢舉此回應

sys.dm_exec_query_stats 這個 DMV 是以執行計畫為單位去統計效能資料,要從執行計畫去觀察才會得到答案

SELECT,它卻也有「total_logical_writes」?


執行計畫中有三種連結,Nested Loops JOIN、Merge JOIN 和 Hash JOIN,後面兩者出現就有可能會把資料寫進 TempBD 暫存,
也就會出現 logical_write,用 SET STATISTICS IO ON 觀察,應該會出現 WorkTable

二: 為什麼對應的SQL語法是UPDATE,「total_logical_writes」有時候卻是0 ?


腦海裡沒有例子可以舉例說明,^^''

執行計畫相關資源

Techday 2012 - T-SQL執行計畫深入探討
http://eplus.asia.edu.tw/channels/27/episodes/86?locale=zh_tw
=> 很幸運這個還在,要看要快

SQL Server Performance Tuning 效能調校
http://www.books.com.tw/products/0010638550
=> SQL Pass 上發問的麥香荔枝,假如是本人的話,你手邊應該有這本書,第 11 章是介紹執行計畫

本篇文章回覆於2015-09-25 21:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

pilipala
檢舉此回應
二: 為什麼對應的SQL語法是UPDATE,「total_logical_writes」有時候卻是0 ?


下 UPDATE 語法,但卻沒有符合 WHERE 條件的資料可以進行更新,total_logical_writes 就會是 O
本篇文章回覆於2015-09-28 15:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

pilipala
檢舉此回應

執行計畫中有三種連結,Nested Loops JOIN、Merge JOIN 和 Hash JOIN,後面兩者出現就有可能會把資料寫進 TempBD 暫存,
也就會出現 logical_write,用 SET STATISTICS IO ON 觀察,應該會出現 WorkTable


今天驗證這個想法,發現並不會產生 logical_write,抱歉誤導你了 ~~ <(_ _)> ~~
本篇文章回覆於2015-09-29 10:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

荔枝
捐贈 VP 給 荔枝 檢舉此回應
謝謝pilipala大大,

真是不好意思,這樣都會被抓到~~~~>_<.....沒錯,「那個人」就是我啦!

我剛好還沒去看第11章,我會找時間先看看再說,

所以說.....logical_write,跟執行計劃有關?.....啊,我還是先看完再來發問好了,搞不好就已經沒問題了,

謝謝

本篇文章回覆於2015-10-01 23:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

pilipala
檢舉此回應

這篇 Technet 討論可以參考看看
https://social.technet.microsoft.com/Forums/zh-TW/2e9b17e9-4dad-4acf-a7cc-7483ecbe5c1c/selecttotal-logical-writes?forum=sqlservermanagementzhcht
本篇文章回覆於2015-11-24 08:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.