近日在檢視索引時對幾個重複索引做完整併後欲將多餘的索引刪除時發生3723錯誤,並且無法順利刪除索引。
如何異動使用者資料表值參數類型(User-defined Table Types)的Schema
今天收到一個需求得修改資料表值參數類型的欄位長度,但使用者定義資料表值參數類型無法使用Alter來異動,只能Drop後Create來異動。一旦該Table Type有被Stored Procedure參照的話,我們還無法Drop掉…….
DBCC SHRINKDATABASE無法壓縮資料庫
- 3292
- 0
- [SQL]TroubleShooting
- 2020-02-18
日前將一個正式資料庫還原至測試機上,但因為測試機不需要實際資料,因此我就Truncate所有Table後再壓縮資料庫來減少測試機器的硬碟佔用空間。
利用計畫指南來重用執行計畫降低CPU壓力
很久以前就聽聞過SQL的計畫指南功能,但我一直沒有用過。可以從字面上初步了解就是針對某些查詢我們可以干涉最佳化引擎,讓SQL根據我們的需求來跑執行計畫。一些官方文件的舉例就是在不異動查詢語句的狀況下讓管理者可以針對語句下hint(如MAXDOP設定及OPTIMIZE FOR或Recompile等)。
SQL鏡像憑證到期解決方案
今天開啟一部SQL主機,該主機是階段性使用,因此已經一年沒開機了。主機安裝兩個Instance,Instance A會鏡像一個DB到Instance B去。
解決SQL Server因升級後改採新型的基數估計(Cardinality Estimation)而導致的效能問題
最近由於SQL2008R2即將EOS,所以陸陸續續將資料庫升級到SQL2017的版本。而升級完成後有部分功能居然查詢時間太久導致Web TimeOut,經一番查詢後發現是新版SQL Server已在SQL2014採用新的基數估計(Cardinality Estimation簡稱CE)。而某些查詢會因為採用新版CE來估計統計反而誤用效能不好的執行計畫,官網分析有下列特性的查詢就可能發生查詢變慢的狀況。
淺談計算欄位(Computed Column)的PERSISTED引數
相信很多情境下會在資料表的欄位設計上用到所謂的計算欄位(Computed Column),顧名思義該欄位存放的值就是經過計算的一個結果。然而計算欄位的資料內容一般常會是取出資料後即時運算並顯示結果,但有時候也會因為某些需求希望能將運算結果真實寫入在page中,而這個需求只要在建立資料欄位時加入一個關鍵字Persisted即可。
索引ALLOW_PAGE_LOCKS設成OFF導致無法REORGANIZE
- 736
- 0
- [SQL]TroubleShooting
- 2018-10-26
今日收到一個錯誤告警,顯示因為頁面層級鎖定已經停用導致REORGANIZE索引發生失敗。
SQL登入帳號可以修改自己的密碼嗎?
- 5206
- 0
- [SQL]TSQL語法技巧
日前一位開發同仁反應他透過SSMS的UI要修改自己的密碼時都會顯示權限不足而無法修改,我試了一下發現的確如此
修改MSSQL Instance定序
日前發現一個資料庫定序跟其他資料庫不同,為求一致性,我們可以單純用Alter Database去改資料庫的定序。但這樣的改法並不會修正該資料庫中其他資料表欄位原有的定序,只會影響未來新增的資料表。所以如果舊資料表欄位也要更改定序的話會需要Alter Table Alter Column 或 建立新資料表並重倒資料。
開啟IDENTITY_INSERT選項Insert資料時會影響其他Session對相同資料表的Insert嗎?
- 2736
- 0
- [SQL]TSQL語法技巧
- 2018-07-19
近期在撰寫TSQL做資料匯入時,會因為目的資料表有Identity型態的欄位,所以得在該資料表開啟IDENTITY_INSERT後再寫入資料。
資料表壓縮的狀況下Alter Column Not Null會產生大量Log
今天Alter一張千萬筆的資料表中一個欄位為NOT NULL,結果爆了LDF
Constraints在資料含有NULL時的隱憂
- 1310
- 0
- [SQL]TroubleShooting
NULL在資料庫中一直以來常會被拿出來警世,也看過一些書籍或聽一些演講都會提到盡量不要讓欄位是可以允許NULL的。
只是淺談MS SQL Server的Page Splits運作原理
一直以來,很多文章或書籍都會提到資料庫在對資料做增刪修都會因為資料異動導致Page Splits的產生。一旦過度的分割就會提高所謂的邏輯片段,而要降低邏輯片段就得對資料表或索引做Rebuild或Reorganize,今天心血來潮突然想LAB看看SQL對Page Splits的運作原理為何,所以簡易做個實驗。
不要再用Session id < 50來判斷該Session是System Process還是User Process了
一直以來有個觀念就是Session ID小於50的就是SQL系統用的System Process。
千萬別用Sql Server Management Studio的資料列編輯功能剪貼來匯大量資料
今天檢視前一日的SQL 效能報表時發現下班前到晚上8點持續有BatchRequest偏高的趨勢
如何將單一Table轉移 (Switch) 至Partition Table上
之前看了一些關於Partition Table可以透過Switch的方式轉移某個Partition到另一個非Partition Table上,來降低Insert Into大量資料會造成IO的問題。
異動欄位型態時要注意該欄位是否有其他物件相依,Msg 5074, Level 16, State 1
日前將一張資料表中一個資料型態為varchar改為nvarchar時發生了錯誤,發生錯誤之原因是因為該欄位有Default的Constraint相依導致。本LAB來簡單模擬此一問題。
使用DROP_EXISTING參數重建叢集索引以降低交易紀錄
MSDN官網在Create Index中對DROP_EXISTING功能的解說如下。
長度可變資料欄位(varchar 或 nvarchar)導致資料表破碎嚴重
日前支援開發一個跟卡證相關系統,系統目前上線運作快一年。日前檢視一下該系統相關資料表是否有索引破碎問題需要重建。其中發現一張資料表是用來存放卡號等相關資料,其破碎率高達99% ( Clustered Index ) 。我檢視該資料表叢集索引是採流水碼編號排序,理論上應該不至於破碎如此嚴重啊 !