SlideShare a Scribd company logo
從Developer來看
效能調校
1
亂馬客
2015/05/26
Developer 只管寫 Code 2
當系統 …很慢…
3
其實不知
到底怎麼回事!!!
4
釐清
慢在那裡?
5
用工具
 客戶
 Fiddler
 Log Parser
 Monitoring Agent
 Dynatrace
6
客戶,哭給你看 7
客戶 8
Fiddler:把User的感受量化 9
Fiddler
Fiddler / Browser Tool F12 10
IIS Log 11
IIS Log:記錄每個Request的資訊 12
IIS Log
Fiddler
Log Parser 13
Log Parser Lizard 14
找出
慢的、資料大的
程式
15
MS Monitoring Agent: 監控 .NET 程式 16
IIS Log
Fiddler
Microsoft Monitoring Agent
Microsoft Monitoring Agent 17
利用 Microsoft Monitoring Agent 來找出系統效能及異常問題
Dynatrace: 監控程式 18
IIS Log
Fiddler
Microsoft Monitoring Agent
Dynatrace
Dynatrace
Dynatrace Dynatrace
Dynatrace 19
 完整的資訊
Monitoring Agent &
Dynatrace
可以找出更詳細的資訊
20
調校方式
 定目標
目前狀況 …
調整後 …
 改善項目
程式Logic
網頁
DB
21
調校目標
8秒 -> 3秒
22
程式Logic
 某個Method重覆呼叫了 N 次!
 交易過長
 取得過多的資料
 CRM 新光人壽 透過 WebService 取得個人的 Todo
 取得所有的 Todo 回到 AP 再 Filter 出目前這個 User 的 Todo
 …
23
200 /304
GET / Cache
24
設定賞味期 25
IIS 動態/靜態 壓縮 26
MS SQL
用 Profiler
 使用 範本
 勾選要看資訊
 設定篩選條件
27
Profiler
使用範本
 選擇要看的 Events
28
Profiler
勾選要看資訊
 Duration
 CPU/Reads/Writes
 RowCounts
 TransactionId
 …
29
Profiler
設定篩選條件
 Duration >= 1
 過濾一些很快的SQL
 ApplicationName
 Focus 在 有問題的 AP 上面
 Reads/Writes > …
30
SQL Profiler 31
SQL Trace 32
Execution plan 33
Execution plan
1. 預估 VS 實際
2. 成本 & Scan
34
預估執行計畫 35
實際執行計畫 36
預估筆數 VS 實際筆數 37
更新統計資訊
UPDATE STATISTICS [tablename];
38
統計資訊 39
Missing index warnings 40
高成本 & Scan
SELECT ....
FROM LOL_LEV --約18萬筆
WHERE
LEFT(BAR_CODE,7)=dbo.fnDATE_CHANGE(CONVERT(VARCHAR,GETDA
TE(),112),2)
-- BAR_CODE欄位中,NULL的資料,有 163,709 筆
41
解法-1
 使用計算欄位 並增加Index
ALTER TABLE LOL_LEV
ADD BAR_CODE_DATE AS LEFT(BAR_CODE,7) PERSISTED;
42
解法-2
 用Filtered Indexes
CREATE NONCLUSTERED INDEX
NCIDX_BAR_CODE_FILTER
ON [dbo].[LOL_LEV] (BAR_CODE)
WHERE BAR_CODE IS NOT NULL ;
GO
使用Filtered Index要注意的地方
43
解法-3
 Index + 改Query
CREATE NONCLUSTERED INDEX NCIDX_BAR_CODE
ON [dbo].[LOL_LEV] (BAR_CODE)
GO
WHERE
LEFT(BAR_CODE,7)=dbo.fnDATE_CHANGE(CONVERT(VARCHAR,GETDATE(),1
12),2)
改成
WHERE BAR_CODE >
dbo.fnDATE_CHANGE(CONVERT(VARCHAR,GETDATE(),112),2) + '000' and
BAR_CODE < dbo.fnDATE_CHANGE(CONVERT(VARCHAR,GETDATE(),112),2) +
'999'
44
避免在 Where
的欄位中使用
Function
如:IsNull, Left …
45
Nested Lookup 46
解法
加入原有 Index 的 Include
CREATE INDEX AK_Employee_NationalIDN ON
dbo.EMP_EMPLOYEE
(PER_SERIL_NO, CNAME)
INCLUDE (ID_NO, ENAME);
47
48
Deadlock
 通常是 交易 + 某個SQL沒有用到 Seek
49
Update with SCAN 50
Update with SCAN
Detail
 先取 Update Lock
 符合就取 Exclusive Lock
 然後更新它
51
Summary
 Web AP
 Cache
 Compress
 DB
 更新統計資訊
 調整 Index
 用 Seek 取代 Scan
 用 Include 取代 Lookup
52
Thanks
54

More Related Content

Similar to 從Developer來看 效能調校

Mobile app security
Mobile app securityMobile app security
Mobile app securitydrewz lin
 
Lenovo SAP Customer Success Story
Lenovo SAP Customer Success StoryLenovo SAP Customer Success Story
Lenovo SAP Customer Success Story
SAP Technology
 
查小三 + 新智慧營運 Splunk4.2大顯身手
查小三 + 新智慧營運 Splunk4.2大顯身手查小三 + 新智慧營運 Splunk4.2大顯身手
查小三 + 新智慧營運 Splunk4.2大顯身手
Gandalf Huang
 
CYBERSEC 2020 臺灣資安大會 windows malware hot 5 - 短短
CYBERSEC 2020 臺灣資安大會 windows malware hot 5  - 短短CYBERSEC 2020 臺灣資安大會 windows malware hot 5  - 短短
CYBERSEC 2020 臺灣資安大會 windows malware hot 5 - 短短
HITCON GIRLS
 
Forensics 101
Forensics 101Forensics 101
Forensics 101
HsiangMingHung
 
Forensics 101 的副本
Forensics 101 的副本Forensics 101 的副本
Forensics 101 的副本
NCUDSC
 

Similar to 從Developer來看 效能調校 (6)

Mobile app security
Mobile app securityMobile app security
Mobile app security
 
Lenovo SAP Customer Success Story
Lenovo SAP Customer Success StoryLenovo SAP Customer Success Story
Lenovo SAP Customer Success Story
 
查小三 + 新智慧營運 Splunk4.2大顯身手
查小三 + 新智慧營運 Splunk4.2大顯身手查小三 + 新智慧營運 Splunk4.2大顯身手
查小三 + 新智慧營運 Splunk4.2大顯身手
 
CYBERSEC 2020 臺灣資安大會 windows malware hot 5 - 短短
CYBERSEC 2020 臺灣資安大會 windows malware hot 5  - 短短CYBERSEC 2020 臺灣資安大會 windows malware hot 5  - 短短
CYBERSEC 2020 臺灣資安大會 windows malware hot 5 - 短短
 
Forensics 101
Forensics 101Forensics 101
Forensics 101
 
Forensics 101 的副本
Forensics 101 的副本Forensics 101 的副本
Forensics 101 的副本
 

從Developer來看 效能調校

Editor's Notes

  1. http://www.dotblogs.com.tw/rainmaker/archive/2014/05/01/144927.aspx 找出錯誤及超過5秒的資訊
  2. http://www.codeproject.com/Articles/242133/Making-the-most-out-of-IIS-compression-Part-conf http://weblogs.asp.net/owscott/iis-7-compression-good-bad-how-much
  3. 可以用 Trace
  4. http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp
  5. ALTER INDEX ALL ON tablename REBUILD;
  6. USE ARTC_SOD20_M GO SELECT SRNO_CODE, SRNO_CODE_DESC, GIST_DESC FROM dbo.FMMITEM WITH (INDEX(IX_FMMITEM_2)) WHERE SRNO_CODE = '1030001516' --CREATE INDEX IX_FMITEM_2_1 ON dbo.FMMITEM --(SRNO_CODE) --INCLUDE(SRNO_CODE_DESC, GIST_DESC); SELECT SRNO_CODE, SRNO_CODE_DESC, GIST_DESC FROM dbo.FMMITEM WITH (INDEX(IX_FMITEM_2_1)) WHERE SRNO_CODE = '1030001516'
  7. 它會一筆筆地找,先取得Update Lock,不符合就Rease Update Lock,然後再取下一筆,有符合的,就取得  Exclusive Lock 。 而第2個查詢,會等待是因為要取得 Update Lock ,而該筆資料被查詢1取得了Exclusive Lock了!
  8. Used to establish a lock hierarchy. The types of intent locks are: intent shared (IS), intent exclusive (IX), and shared with intent exclusive (SIX).