[SQL Server]清理計畫快取中指定的執行計畫

這週客戶網站出現了一個效能問題,很快的調查發現是特定SQL查詢慢(10秒),剛好開始發生的時間點是每週例行的重建索引,本以為是統計值未更新到新的資料分佈,但資料庫有設定自動更新統計值,客戶重建索引後,也有執行更新統計值的語法。(抓頭..傷腦筋)

進一步從執行計畫觀察,估計的資料列數目與實際也沒有偏差的情形,最後只好和客戶開單一起在安控室重新串語法測試,沒想到速度卻是出奇的快,感覺像是查詢錯用了執行計畫,於是想試試把快取執行計畫清除,以前只會清全部,這次來試試清理指定的執行計畫。

...繼續閱讀 »

[Windows Server]無法啟動互動式服務偵測Interactive Services Detection(錯誤1:功能錯誤)

因為程式要在背景下執行,當應用程式或是服務需要顯示UI時,就需要Interactive Services Detection(互動式服務偵測),最近換了新的OS,也想試背景下的UI顯示,使用互動式偵測服務的第一步就是把服務啟動(Windows 8\Server 2012之後預設是手動未啟動的狀態),但啟動時出現了 錯誤1:功能錯誤。來筆記解決問題的方式。

 

...繼續閱讀 »

[ASP.NET][Web Form]PostBack時失去Label的Text

最近同事在Client-side修改asp.net web form控制項的內容,但postback到Server-Side後抓不到值,同事發生問題的控制項是Label,但我們常使用的TextBox控制項則可以,另外根據MSDN上的說明,使用 Label 控制項可以用來顯示在頁面上設定位置的文字,好,馬上實驗Http Request內容是否有帶postdata?

 

...繼續閱讀 »

[SQL Server][DeadLock]deadlock_priority 優先升等商務艙

在繁忙的線上交易資料庫(OLTP)世界裡,當兩個以上Session都在等待存取彼此鎖定的資源時,資料庫就會出現死結而有交易需要被犧牲。就像最近聯合航空強拉旅客下機的事件裡,發生超額訂位且check in後,似乎有航空公司處理的標準;在SQL DataBase Engine中,也有一套選擇下機旅客的標準,只記得會選擇交易復原成本(Cost)較低的犧牲(買促銷票的),有沒有其他要注意的點?

...繼續閱讀 »

[SQL Server][T-SQL]輸入全半形空白

來到周末前,客戶跑來同事的桌邊問了一個小問題,T-SQL要如何輸入全型空白(空格),為了工程師肉眼的可維護性,除了直接輸入這種' ',想找其他的解法,剛剛跑步時想到客戶的問題,想到幾種解法,快來筆記一下。

...繼續閱讀 »

[Windows Server]Server 2012 R2 - FTP中文檔名傳輸問題

最近同事在Windows Server 2012 R2環境使用FTP Command line工具(ftp.exe)測試到另一台FTP Server上下傳檔案,其中,如果碰到中文檔名時就是會失敗,但切到2008 R2的環境測試FTP Command line卻可以成功,也試著調整FTP Server的允許UTF8設定以及command line的編碼設定(chcp 950,65001),但就是不成功(跺腳!), 好,來筆記問題的排解。

 

...繼續閱讀 »

[.NET][C#]物件建立之淺層複製(Shallow Copy) vs 深層複製(Deep Copy)

最近踩到一個legacy code 在C#物件複製的陳年小雷,拆解炸彈的同時也寫筆記! 

有時我們會在類別(class)中加入Object.MemberwiseClone方法來提供物件的複製(clone),舊程式使用新物件裡的屬性剛好都是用new關鍵字建立,大概像下面的方式使用屬性:  

p2.IdInfo = new IdInfo(17);

很幸運一直沒發生參考問題,最近改用直接指派,類似下面的寫法:  

p2.IdInfo.IdNumber = 17;

測試時大驚!原始物件p1的值竟然被覆蓋了,花了時間才發現自己對MemberwiseClone的定義不夠清楚。

 

...繼續閱讀 »

[SQL Server]記憶體緩存資料寫入磁碟(二)自動與間接檢查點(Auto and Indirect CheckPoint)

上一篇文章中,我們探討到CheckPoint檢查點會將記憶體(Buffer Pool)中的中途資料分頁flush到磁碟上,其中checkPoint又可以分為自動、間接、手動及系統內部觸發幾種類型,這篇我們來嘗試使用SQL Server 2012推出,SQL Server 2016正式推薦使用的間接檢查點(Indirect CheckPoint)機制。

...繼續閱讀 »

[SQL Server]記憶體緩存資料寫入磁碟(一)首部曲

很少扎實的實作SQL Server Database Engine內部的行為,最近發現某個客戶的效能瓶頸可能在Transaction log的I/O,同時另外一家客戶正在導入儲存廠商異地備援(DR site)的解決方案(不打算用AlwaysOn傳送到異地),由於保護的是磁碟資源,我們需要確保磁碟上的mdf、ndf與ldf的一致性。

來筆記Buffer Flush To Disk讀書心得以及SQL2012/2014/SQL2016相關的新古與全新功能。
 

...繼續閱讀 »

[SQL Server][DeakLock]觀察死結的工具(四)擴充事件(Extended events)

除了Trace flag及SQL Profiler能野生捕獲DeadLock資訊,在SQL Server 2008開始,也多了一個擴充事件(Extended events)的工具可以幫助我們,到了SQL Server 2016,雖然Trace flag及SQL Profiler都還能運作,但考慮到SQL Profiler對於Server負載的衝擊以及將來SQL產品的支援,我們就是慢慢把系統診斷的工作轉移到擴充事件中嚕~

...繼續閱讀 »