How TVP Affect SQL Server Memory

之前有寫過一篇文章,其中的Root Cause就是TVP+SQL Profiler所造成的記憶體內存問題。原本以為tvp中的欄位如果沒有varchar(max)理應不會對SQL Server造成問題。但在測試結果下,如果Application沒有對字串限制長度,還是會造成上述的記憶體內存問題。同時也感謝Rock撥空測試幫助我驗證以下結論。

大概有幾個手段可以解決問題

  1. 限制Application 字串長度
  2. 升級CU Hotfix
//Sample Code for limit string length
DataSet dataSet = new DataSet();

DataTable customTable = new DataTable();
DataColumn dcName = new DataColumn("Name", typeof(string));
dcName.MaxLength= 500;
customTable.Columns.Add(dcName);

dataSet.Tables.Add(customTable);

至於原理跟測試,有興趣的可以看這篇文章

DataTable objects are most commonly used as TVP values. DataTables are easy to use and can serve as containers for data beyond just TVP usage. But unlike DbDataReader and IEnumerable objects, a big gotcha with a DataTable is that the default data type String with maximum length of -1 (2GB LOB). This is the .NET equivalent of the SQL Server nvarchar(MAX) data type and has many insidious and negative implications with a TVP.

[BUG] OBJECTSTORE_LBSS

這次遇到的問題,大概查了將近兩周才查出結果,OBJECTSTORE_LBSS這個Waittype在官網和網路上都找不到太多的資源。

遇到的問題:

突然發現有大量的Session 都在等Latch(ACCESS_METHODS_ACCESSOR_CACHE)的資源,並且造成效能低落。往Latch和 ACCESS_METHODS_ACCESSOR_CACHE查都沒有太多的方向。

繼續閱讀 “[BUG] OBJECTSTORE_LBSS"

SQL Server Agent Invokes Failed ‘sa’ Login

這篇分享是從SQL PASS的討論整理出來的,社團的前輩真的很厲害,一下就找到原因,並且發現這是SQL的BUG…

苦主環境為: SQL 2017 + CU6

狀況如下:
使用維護計畫(Maintenance plan )刪除過期被份檔+做交易記錄備份,會在Event Viewer不斷出現【使用者 ‘sa’ 的登入失敗。 原因: 密碼與提供的登入密碼不符。】。此狀況再從sa改為windows驗證就正常。

Login failed for user ‘sa’. Reason: Password did not match that for the login provided. [CLIENT: ]

繼續閱讀 “SQL Server Agent Invokes Failed ‘sa’ Login"

SQL 2014 Database Mail 導致 high CPU

某一次升版到SQL Server 2014後,CPU開始不尋常的升高,但是SQL Server不忙,看了一下Task Manger發現DatabaseMail占用很多資源。

2018-05-16_111943.png

於是上網一查,發現這個問題在SQL SERVER 2016也有,是個BUG…….
https://support.microsoft.com/en-nz/help/3197879/fix-sql-server-2016-database-mail-causes-high-cpu-usage-after-many-ema

2018-05-16_112456.png
繼續閱讀 “SQL 2014 Database Mail 導致 high CPU"