這週客戶網站出現了一個效能問題,很快的調查發現是特定SQL查詢慢(10秒),剛好開始發生的時間點是每週例行的重建索引,本以為是統計值未更新到新的資料分佈,但資料庫有設定自動更新統計值,客戶重建索引後,也有執行更新統計值的語法。(抓頭..傷腦筋)
進一步從執行計畫觀察,估計的資料列數目與實際也沒有偏差的情形,最後只好和客戶開單一起在安控室重新串語法測試,沒想到速度卻是出奇的快,感覺像是查詢錯用了執行計畫,於是想試試把快取執行計畫清除,以前只會清全部,這次來試試清理指定的執行計畫。
這週客戶網站出現了一個效能問題,很快的調查發現是特定SQL查詢慢(10秒),剛好開始發生的時間點是每週例行的重建索引,本以為是統計值未更新到新的資料分佈,但資料庫有設定自動更新統計值,客戶重建索引後,也有執行更新統計值的語法。(抓頭..傷腦筋)
進一步從執行計畫觀察,估計的資料列數目與實際也沒有偏差的情形,最後只好和客戶開單一起在安控室重新串語法測試,沒想到速度卻是出奇的快,感覺像是查詢錯用了執行計畫,於是想試試把快取執行計畫清除,以前只會清全部,這次來試試清理指定的執行計畫。
隔壁部門的測試資料庫被註記了有疑問(SUSPECT)的狀態而無法連線,來筆記修復的方式。
因為程式要在背景下執行,當應用程式或是服務需要顯示UI時,就需要Interactive Services Detection(互動式服務偵測),最近換了新的OS,也想試背景下的UI顯示,使用互動式偵測服務的第一步就是把服務啟動(Windows 8\Server 2012之後預設是手動未啟動的狀態),但啟動時出現了 錯誤1:功能錯誤。來筆記解決問題的方式。
除了打開管理工具中的活動監視器(Activity Monitor)外,來試試幾個動態管理檢視(DMV)的組合(dm_tran_locks x dm_os_waiting_tasks x dm_exec_connections)。
下午協助同事抓SQL資料庫效能問題,暫時沒有頭緒,不過碰上了已經在記憶體中忘光的SQL 2012新功能(對不起老師): 順序物件(Sequence),來筆記,順便觀察快取設定對取號效能的影響。
最近同事在Client-side修改asp.net web form控制項的內容,但postback到Server-Side後抓不到值,同事發生問題的控制項是Label,但我們常使用的TextBox控制項則可以,另外根據MSDN上的說明,使用 Label 控制項可以用來顯示在頁面上設定位置的文字,好,馬上實驗Http Request內容是否有帶postdata?
在繁忙的線上交易資料庫(OLTP)世界裡,當兩個以上Session都在等待存取彼此鎖定的資源時,資料庫就會出現死結而有交易需要被犧牲。就像最近聯合航空強拉旅客下機的事件裡,發生超額訂位且check in後,似乎有航空公司處理的標準;在SQL DataBase Engine中,也有一套選擇下機旅客的標準,只記得會選擇交易復原成本(Cost)較低的犧牲(買促銷票的),有沒有其他要注意的點?
下午到客戶測試區加班,年輕同事問了一個關於ASP.NET Web Form跨網頁導向的問題,進一步討論到HyperLink與LinkButton控制項的差異,趁睡前趕緊筆記。
幾年前寫了一個windows服務來處理socket接收批次工作的通知,最近同事想在一個專案中導入,安裝服務的過程中,在幾個成員的開發機都完成安裝,但在測試機(Windows Server 2008 R2)就是不依,同事報案了2天,終於有時間回公司解題了,來筆記。
今天下班前,客戶來閒聊最近行內週邊系統發生的一個未知原因應用程式問題,問題發生在powershell呼叫webservice,自己以前沒試過從Powershell呼叫webservice,晚上刷好Apple Pay賺500哩之後來試試。
來到周末前,客戶跑來同事的桌邊問了一個小問題,T-SQL要如何輸入全型空白(空格),為了工程師肉眼的可維護性,除了直接輸入這種' ',想找其他的解法,剛剛跑步時想到客戶的問題,想到幾種解法,快來筆記一下。
最近同事在Windows Server 2012 R2環境使用FTP Command line工具(ftp.exe)測試到另一台FTP Server上下傳檔案,其中,如果碰到中文檔名時就是會失敗,但切到2008 R2的環境測試FTP Command line卻可以成功,也試著調整FTP Server的允許UTF8設定以及command line的編碼設定(chcp 950,65001),但就是不成功(跺腳!), 好,來筆記問題的排解。
最近踩到一個legacy code 在C#物件複製的陳年小雷,拆解炸彈的同時也寫筆記!
有時我們會在類別(class)中加入Object.MemberwiseClone方法來提供物件的複製(clone),舊程式使用新物件裡的屬性剛好都是用new關鍵字建立,大概像下面的方式使用屬性:
p2.IdInfo = new IdInfo(17);
很幸運一直沒發生參考問題,最近改用直接指派,類似下面的寫法:
p2.IdInfo.IdNumber = 17;
測試時大驚!原始物件p1的值竟然被覆蓋了,花了時間才發現自己對MemberwiseClone的定義不夠清楚。
最近的工作中要幫使用者設定大量的系統參數,有陣子沒使用到資料列串接,一時之間失去了她的消息,這年頭忘記的比記得的多,重新拾回後快來點部落筆記,順便二探SQL Server 2016新功能: STRING_SPLIT:字串切割。
這兩天客戶碰到了NLog使用上的問題,程式將Fatal等級的log設定了兩組輸出(File and Windows Event log),但File產出時好時壞,有時那一天應該有log產生但卻整天都沒檔案,來筆記今天白天追蹤NLog無法寫出log的方法。
有時預存程序、檢視表會跨資料庫讀取資料,客戶最近想盤點跨資料庫存取的程式清單,來筆記快速找出物件的T-SQL語法。
Delayed Durability是SQL Server 2014的新功能,在某些Transaction log負載較大的情境中,如果願意延遲一點ACID靈魂中的持久性(Durability),同時也有接受可能的Data Loss風險準備,也許可以用延遲持久性和魔鬼交換Transaction log寫入效能。
上一篇文章中,我們探討到CheckPoint檢查點會將記憶體(Buffer Pool)中的中途資料分頁flush到磁碟上,其中checkPoint又可以分為自動、間接、手動及系統內部觸發幾種類型,這篇我們來嘗試使用SQL Server 2012推出,SQL Server 2016正式推薦使用的間接檢查點(Indirect CheckPoint)機制。
很少扎實的實作SQL Server Database Engine內部的行為,最近發現某個客戶的效能瓶頸可能在Transaction log的I/O,同時另外一家客戶正在導入儲存廠商異地備援(DR site)的解決方案(不打算用AlwaysOn傳送到異地),由於保護的是磁碟資源,我們需要確保磁碟上的mdf、ndf與ldf的一致性。
來筆記Buffer Flush To Disk讀書心得以及SQL2012/2014/SQL2016相關的新古與全新功能。
除了Trace flag及SQL Profiler能野生捕獲DeadLock資訊,在SQL Server 2008開始,也多了一個擴充事件(Extended events)的工具可以幫助我們,到了SQL Server 2016,雖然Trace flag及SQL Profiler都還能運作,但考慮到SQL Profiler對於Server負載的衝擊以及將來SQL產品的支援,我們就是慢慢把系統診斷的工作轉移到擴充事件中嚕~