2017年4月28日 星期五

[SQL Server] Deadlock案例分析 : 透過Join user-defined table type 來更新資料所引發的死結

在前幾個禮拜查看deadlock extended event時,發現有一段更新的語法被當作Victim(受害者)給放棄掉了,由於此段語法是重要的商業邏輯,且AP端沒有再次做Retry
立馬拉出deadlockgraphxml查看其發生的原因,如下圖:

2017年4月21日 星期五

SQL Server Performance tuning 兩年菜鳥心得雜談

前言

畢業至今也兩年多了,第一份工作也就是現在的工作,一開始主要擔任後端開發的工程師,串接後端的Service,主要負責商業邏輯層跟資料存取層的開發。
由於公司產業的關係,對於交易效能有極度的需求,為了避免不必要的I/O存取,所以大部分的商業邏輯都寫在資料庫,所以有很多的時間在接觸資料庫的開發。
後來在效能調校的工作上有點小小成績,而且也玩出興趣來了,在前輩的
Promote下成為我們teamDB Owner
在此也特別感謝我們公司的前輩們,放任我選擇自己所愛的領域,自由的發展,也不時的糾正出我的錯誤,才能有今天的我。
還記得那時候剛來公司三個多月就上錯了
ScriptProduction table Drop掉了(),不過那是另一段故事了...好了進入正題,分享一點小小心得

2017年4月19日 星期三

[SQL Server][SSMS] 透過建立Code snippet提升工作效率

前言
每個DBA 或者 DB Developer經常都會有許多自己撰寫的花式Script,透過這些語法去查詢DMV或者metadata來幫助我們在緊急狀況的時候做trouble shooting,或者是Load test的時候輔助我們找出bottleneck
但這些語法通常都不太好直接背起來,就算即時自己兜出來的script,其包含資訊也不是那麼完整。最後就會散落在各處(onenotetxt...等等),如果找不到或忘記又得去網路上google
每個同事也都會自己私藏一些好用的獨門秘方,卻沒有一個方便的共享平台。

這個問題困擾了我許久,後來我找到了在SSMS 2012之後推出的新功能 : Code snippet manager

[SQL Server] 了解ACID

前言
SQL SERVER中,一段語法被執行時,被視為一個Logical unit(邏輯位元)
我們可以透過BEGIN TRANSACTION ROLLBACK/COMMIT將多段語法打包為一個Logical unit
為了確保每個
Logical unit在進行資料的變更時是可靠安全的,必須符合四大原則,也就是我們常聽到的ACID原則
  • Atomicity (原子性、不可部份完成性)
  • Consistency (一致性)
  • Isolation (隔離性)
  • Durability (持久性)
下面分別介紹其定義並帶一些簡單的範例來解釋

2017年4月18日 星期二

[SQL Server] 使用RETURN回傳數值發生Overflow

我們經常藉由 T-SQL 中的RETURN,來中斷我們的Stored procedure、一段batch.
有時候也會透過RETURN來回傳一個數值。

但有些人可能不知道 : 透過RETURN只能回傳 INT 大小的數值(-2,147,483,648 to 2,147,483,647)
如果數值超過此大小便會發生Overflowexception
即便你有宣告BIGINTDECIMAL來承接參數。