[SQL Server][系統資訊收集]SQLDiag.exe(一)啟用SQLProfiler

最近重新和SQLdiag.exe見面,神話傳說中一種以主控台程式或是Windows服務形式來執行的SQL診斷偵測工具,執行檔隨附在SQL Server的安裝目錄BINN之下。她出道的很早,她可以收集Windows相關資源使用、事件紀錄、SQL內的錯誤、封鎖及SQL Profiler可以錄到的資訊,以前認識不深,這次重新認識。

...繼續閱讀 »

[SQL Server][Machine Learning]建模時發生記憶體不足(failure to allocate requested memory)

最近想把某個問題的答題方式從線性迴歸改用決策樹演算法,使用sp_execute_external_script呼叫revoscaler下的rxDTree演算法建模時,出現了外部指令碼錯誤 : failure to allocate requested memory訊息,相同的資料量,線性模型rxFastLinear卻可以處理,筆記偵錯之路。

...繼續閱讀 »

[SQL Server][安裝]Tempdb自動組態(SQL Server 2016)

Tempdb在資料庫執行時有著神聖的特殊任務,但也因為只此一家別無分號,為了避免Tempdb Allocation Contention(爭用),裝完SQL Server後,我們會再填單請DBA大人幫忙設定多個Tempdb資料庫檔案,現在SQL Server 2016、SQL Server 2017更方便了,SQL安裝精靈到了"資料庫引擎組態"步驟時,精靈會自動偵測硬體的CPU核心數,我們只需要配置好初始與成長大小。

最近想幫早期上線(SQL Server 2008R2)的客戶增加檔案個數,筆記過程。

...繼續閱讀 »

[SQL Server][安裝]執行磁碟區維護工作(SQL Server 2016)

SQL Server 2016開始,SQL安裝精靈到了"伺服器組態"步驟時,除了SQL服務帳戶的設定,還多了一個"執行磁碟區維護工作"(Perform Volume Manintenance Task)的選項,他是一個有關資料庫檔案立即初始化的優化,建立大型資料庫、資料庫還原、或是針對既有資料庫增加大型檔案或改變檔案大小(包含Autogrow)時,跳過補零的初始化作業,可以帶來IO效能上的提升。

...繼續閱讀 »

[SQL Server][Machine Learning]使用MicrosoftML套件預測紐約計程車司機是否會收到小費

MicrosoftML是Microsoft R Server最新的機器學習演算法套件包,直接內建在SQL Server 2017附加安裝的Machine Learning Services,除了之前CTP時曾經練習過one-class SVM,還包含了

  • 快速線性(同時支援L1、L2正規化)
  • 促進式決策樹
  • 快速隨機森林
  • 羅吉斯迴歸(同時支援L1、L2正規化)
  • 深度神經網路(DNNs)
...繼續閱讀 »

[SQL Server][AlwaysOn]交易紀錄備份後的截斷交易紀錄暫時失靈

在復原模式full or bulk-logged 的使用下,當SQL資料庫Transaction log增加速度變快時,我們會增加執行交易紀錄備份(Transaction log backup)的頻率來加速截斷交易紀錄,已經使用的交易紀錄空間(VLFs)就可以被標示inactive而被重複使用。

不過在AlwaysOn環境遇到一個特別的經驗,即使作了交易紀錄備份也沒辦法截斷交易紀錄,也因此讓Transaction log成長了幾次,來實驗看看當其中一台次要複本資料出現未進行同步處理狀態(NOT SYNCHRONIZING)的後續症狀。

...繼續閱讀 »

[SQL Server]SELECT INTO ON FILEGROUP(SQL Server 2017)

資料庫初始檔案規劃時,除了主要的檔案群組(PRIMARY),我們通常會和DBA大人商量新增一到兩個檔案群組放到更快存取速度的磁碟,當新增資料表時,我們就可以依據資料表受歡迎程度(熱度)來設定不同的選擇,但如果遇到資料表是以SELECT INTO產生出來的,以往就只能放在預設的檔案群組(通常是PRIMARY),  如果想讓SELECT INTO的資料表要放到其他檔案群組,只能改資料庫的預設檔案群組來解決。
 

...繼續閱讀 »

[SQL Server][T-SQL]SQL語法夾帶全形空白導致語法錯誤

這週有個客戶的案子幾百隻程式上線,上線後的隔天早上,同事S回報了系統程式出現很基本的SQL語法錯誤,明明年輕的工程師都測試過,還是發生了。

為了要掩蓋自己對這次問題原因的了解不足(是相容性層級嗎?),趕緊掛上電話花幾分鐘簡單的測試,試試改相容性層級然後回報同事S,最後發現問題在於不同SQL版本對全形空白的解析有差異,這次和相容性層級無關,晚上看F1賽車不練跑,快來筆記這個全形空白問題。

...繼續閱讀 »

[SQL Server][T-SQL]CONCAT_WS串接分隔字元強化(SQL Server 2017)

如果打算將SQL查詢結果串接成逗號分隔的csv檔案,用ETL工具、BCP、用管理工具在查詢結果按右鍵等都可以實現,但如果想單靠SQL語法,MySQL可以用concat-ws()函式,在SQL Server我們就得用上很長的語法串接(+號 or CONCAT),今晚是新加坡F1夜戰第10年,一邊看賽車一邊來吃SQL 2017新的語法糖。

...繼續閱讀 »

[SQL Server][Machine Learning]One Class SVM

在執行異常偵測(abnormal detection)時,通常我們擁有大量的正常交易資料,但可能沒有足夠的不正常交易來讓機器學習,這個時候可以考慮單類別的SVM演算法(one Class-SVM)。很理想的,one Class-SVM隨著MicrosoftML套件也正式在R Server 9.0後可以在地面環境使用了(SQL Server 2017 CTP2),我們來試試。

...繼續閱讀 »

[SQL Server]R Services改名機器學習服務(SQL Server 2017)

R語言以及Python是資料科學工作中常用的兩把利劍,兩者在資料分析、機器學習上都是很棒的武器,去年微軟在SQL Server 2016把R語言整合進平台,就在今年,即將推出的SQL Server 2017也將把Python整合進資料平台了,此外,這一次也同時把R Services重新命名為Machine Learning服務來呼應這次的整合與原有R機器學習套件的升級,不久的將來,Python常用的scikit-learn、TensorFlow及keras套件也能直接執行在SQL Server內了,今天我們先來安裝RC2版本環境。

...繼續閱讀 »

[SQL Server][Emergency]SQL Max Memory Limit Too Low

由於SQL Server最大的記憶體限制預設是2,147,483,647 MB(超大的!而且很眼熟,整數int的最大值),再加上傳說中SQL Server是愛吃記憶體的怪獸,為了避免她不小心把作業系統的記憶體都吃的很乾淨,甚至還使用到虛擬記憶體(可以設定Lock Pages in Memory避免),在安裝完SQL Server後,我們會配置適合比例的記憶體給指定的Instance。因為想測試SQL 記憶體不足對交易效能的影響,不小心把記憶體設定成很小的375 MB,這下悲劇了。

...繼續閱讀 »

[SQL Server]記憶體配置與效能

最近兩個客戶不約而同碰到SQL Server記憶體配置問題,一個客戶諮詢SCOM(System Center Operations Manager)監測到BufferCacheHitRatio比例過低以及Page Life Expectancy分頁停留在快取中的時間太低的警示;另一個客戶則是在測試環境因為資源太少(2GB記憶體)使得Table Scan執行語法跑很久,來筆記一下記憶體壓力對SQL執行效能上的影響。

...繼續閱讀 »