Migrate a SQL Server database from Windows to Linux using backup and restore
[SQL Server]On Linux奇幻旅程(二)Windows備份、Linux還原
- 2084
- 0
- SQLOnLinux
Migrate a SQL Server database from Windows to Linux using backup and restore
由於新客戶對於作業系統的喜好(Linux)與限制(Windows),7年繞了一圈,最終還是要回Linux生態系出發,好在微軟也在2016年加入了Linux基金會,這兩三年也注意到熟悉的微軟技術有更多的跨平台支援,來筆記資料庫SQL Server On Linux的安裝設定。
Benjamin Button: You never know what's coming for you。
這週客戶網站出現了一個效能問題,很快的調查發現是特定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),來筆記,順便觀察快取設定對取號效能的影響。
幾年前寫了一個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),但就是不成功(跺腳!), 好,來筆記問題的排解。
最近的工作中要幫使用者設定大量的系統參數,有陣子沒使用到資料列串接,一時之間失去了她的消息,這年頭忘記的比記得的多,重新拾回後快來點部落筆記,順便二探SQL Server 2016新功能: STRING_SPLIT:字串切割。
有時預存程序、檢視表會跨資料庫讀取資料,客戶最近想盤點跨資料庫存取的程式清單,來筆記快速找出物件的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產品的支援,我們就是慢慢把系統診斷的工作轉移到擴充事件中嚕~
Profiler是SQL Server 2005開始提供的工具,一直以來都是我們診斷案件錄製SQL內部過程的好幫手,她可以讓我們建立和管理追蹤交易過程,蒐集到資訊後也能直接進行分析並且重新執行追蹤結果,我們來試試看捕捉DeadLock事件。
Trace flag是老牌但超實用的系統診斷及暫時關閉特定伺服器功能的工具,從SQL Server 2000的前一代SQL 7.0就出道了,
如果想把Deadlock的資訊儲存在SQL Server紀錄檔中,我們可以啟用Trace flag 1222以及1204。
最近的案子中,在測試及正式環境都碰到了幾次資料庫交易死結(DeadLock)而有交易被犧牲,有一次還碰上了查詢交易的死結(內部平行查詢死結intra-Query Parallel Deadlock),由於SQL Server發生死結(DeadLock)的原因很多,因為經驗不足,自己沒碰過的碰過的多,踏出解問題的第一步就是紀錄死結資訊。
來筆記幾種觀察死結問題的工具。