Tag Archives: MSSQL

WhoIsActive for Azure

之前和大家分享了一些 十分有用的SQL Script
用來 Monitor / 檢查 SQL Server 
MS SQL Notes – Database Management Scripts
今日同事想查詢公司某一個Database 有什麼query 正在執行

在這個情況..使用sp_whoisactive 這個script 便最適合了
可以看到有什麼query在執行..和已經執行多久
可惜嘗試在 Azuredatabase 安裝時出現了些問題
應該是permission的問題..不能在master上執行

做了一會research之後發現..原來他有一個給Azure 用的WhoIsActive script
只需要在每一個Azure 上的Database 執行便可以了

詳情可以考以下Blog Post

http://sqlblog.com/blogs/adam_machanic/archive/2016/04/14/sp-whoisactive-for-azure-sql-database-attempt-2.aspx

或到以下網址下載這個WhoIsActive script
http://sqlblog.com/blogs/adam_machanic/attachment/61064.ashx

Hope you find it useful

MS SQL Notes – Database Management Scripts

最近有機會去接觸公司的Database
可以幫忙performance tuning
很可惜在之前的公司沒有好好的記下一些有用的script
今日想和大家分享一些有用的Database Management script
和用來check Database 的東西
以下有兩個網頁
https://ola.hallengren.com/

這個提供了一些SQL Server Backup, Integrity Check, and Index and Statistics Maintenance的script/解決建議
Script 可以在這裡下載
https://ola.hallengren.com/scripts/MaintenanceSolution.sql
SQL Server Maintenance Solution


http://whoisactive.com/
提供了script來幫助 Monitor SQL Server
去到網頁入面便可以download之後在 SQL Server Management Studio上執行便可以安裝這些script了
sp_whoisactives

有時間再和大家介紹他們的use case

Hope you find it useful

SQL Server TSQL how to View Index Fragmentation – 如何查詢資料庫的索引碎片 資料

今天在研究 Database Performance / 資料庫效能時發現..
原來Database 會像我們的硬碟一樣..會出現 Fragmentation/碎片 的
如果Fragmentation 越大..
Database的效能便會越差..
當然每天的Database Maintenance plan 應該是可以解決這些問題的

今天想和大家分享一個SQL Query 用來 查詢 Database Index 的 Fragmentation資料庫的索引碎片

首先我們要選擇想查詢的 database
之後執行以下的SQL Query

SELECT OBJECT_NAME(st.object_id) AS TableName, 
i.name AS IndexName, 
st.index_type_desc,
st.avg_fragmentation_in_percent, 
st.fragment_count, 
st.avg_fragment_size_in_pages, 
st.page_count, 
st.avg_page_space_used_in_percent, 
st.record_count,
 st.index_depth, st.index_level,st.partition_number, 
st.ghost_record_count, 
st.min_record_size_in_bytes, st.max_record_size_in_bytes, st.avg_record_size_in_bytes
FROM  sys.dm_db_index_physical_stats(DB_ID(DB_Name()), NULL, NULL, NULL , 'SAMPLED') as st
JOIN sys.indexes i 
ON st.object_id = i.object_id AND st.index_id = i.index_id
WHERE index_type_desc <> 'HEAP'

Database Fragmentation

之後他便出輸出很多有用的資訊
我對下面的幾個資訊比較有興趣
avg_fragmentation_in_percent – IN_ROW_DATA 配置單位中,索引的邏輯片段或是堆積的範圍片段。其值以百分比表示,而且會考量多個檔案

fragment_count – IN_ROW_DATA 配置單位分葉層級中的片段數目

avg_page_space_used_in_percent
– 所有頁面所用之可用資料儲存空間的平均百分比。 如果是索引,則為 IN_ROW_DATA 配置單位中 B 型樹狀目錄目前層級的平均數。 如果是堆積,則為 IN_ROW_DATA 配置單位中所有資料頁的平均數。

record_count-總記錄數。

有關Database Index 的 Physical statiic 的資料.可以參考以下網頁
https://msdn.microsoft.com/en-us/library/ms188917.aspx

Index Info

Hope you find it useful

Convert RedGate SQL Backup from sqb file to .bak via GUI – 如何轉換 Redgate的 sqb file 到 SQL Server 能restore的 .bak 檔案 用 GUI 使用者介面

在之前的網誌和大家介紹了如何使用 sqb2mtf.exe 的指令來轉換 RedGate SQL Backup Tool 備份的 SQL Database .sqb 檔案 轉換為一個 Microsoft SQL Server 可以Restore/復原的 備份檔案格式 .bak

今天發現了..原來有一個有介面的功具.
使用方法也十分簡單
我們以到以下網址下載.. [不用安裝的]
http://downloads.red-gate.com/labs/SQBConverterGUI.zip

解壓縮之後開啟 “SQBConverterGUI.exe
SQBConverterGUI Tool to convert Redgate Database Backup file to .BAK

之後選擇要轉換到的格式. E.G. .BAK
選擇檔案
如果有密碼的輸入密碼

SQBConverter GUI
之後按”Convert / 轉換” 便可以
這個程式亦都會報告狀況的
SQB Converter report progress

等一會..如無意外便會完成

SQB Converter Conversion completed
完成後 便會看到很多的 _00.bak _01.bak.. _13.bak 檔案
Lots of .bak files

Hope you find it useful

Syntax error in MySQL Using LIKE in stored Procedure – 在MySQL的 Stored Procedure 上使用Like 出現語句錯誤

今天嘗試在MySQL上寫一個Stored procedure
上面會用到 “LIKE“這一個Operator
這個SQL 是用來查詢 在Table上的 Description field 有沒有和 在Stored Procedure 上 傳送過來 以 這個parameter 開始或結尾的 記錄

SELECT *
FROM localfood_data_tbl
WHERE description LIKE '%'+ var_Description+ '%';

當我儲存這個Stored procedure 時.. 卻出現以下的錯誤
SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ + var_Description +’%’;”
SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' + var_Description +'%';
我十分肯定這個語句在MSSQL上是沒有問題的

當我上網reseach 了一會之後發現..
這是MySQL的 語句問題
如果想把分開的文字串連在一起的話
MSSQL可以使用

SELECT '文字1' + '文字2'

但是在MySQL 上卻需要使用CONCAT 這一個功能
E.G.

SELECT CONCAT('文字1', '文字2')

最後我的SQL 變成了這樣子

SELECT *
FROM localfood_data_tbl
WHERE description LIKE  CONCAT('%', var_Description,'%')

Hope you find it useful

TSQL Convert Second to Time Hour:Minutes:Second HH:MM:SS – TSQL 把秒轉成時分秒時間

今日同事顯示了一個更加方便的方法把 秒轉成時間 格式 HH:MM:SS [時:分:秒]

比起我數天前的網誌方便和簡短很多
MSSQL Convert Second to Time Hour:Minutes:Second HH:MM:SS – MSSQL 把秒轉成時分秒時間
以下是這個方法
這個方法十分聰明
我們可以用TSQL中的Convert的功能
Convert中的 108的格式是 hh:mi:ss
更多的 TSQL日期時間轉換格式可以參考以下網頁
http://msdn.microsoft.com/zh-tw/library/ms187928(v=SQL.105).aspx

之後我們可以好好運用 TSQLDATEADD 功能
加入我們需要轉換的秒數 之後把結果轉換成 108的格式

解決方法:
以下是自定的function:

-- =============================================
-- Author:		[Share Chi Wai]
-- Create date: [2011-09-07]
-- Description:	[This function is used to convert Second to Time HH:MM:SS]
-- =============================================
CREATE FUNCTION [dbo].[ConvertSecondToHHMMSS]
(
	-- Add the parameters for the function here
	@Second INT =0
)
RETURNS VARCHAR(15)
AS
BEGIN
	-- Declare the return variable here
	DECLARE @HHMMSS VARCHAR(10)
	--使用DATEADD 這個功能把秒加上..之後使用Convert Varchar的功能轉日期的格式為108  hh:mi:ss
	SET @HHMMSS = CONVERT(varchar, DATEADD(s, @Second, 0), 108)

	-- Return the result of the function
	RETURN @HHMMSS

END

執行方法:

SELECT dbo.ConvertSecondToHHMMSS (3999)

TSQL convert second to HH:MM:SS
Hope you find it useful

MSSQL Convert Second to Time Hour:Minutes:Second HH:MM:SS – MSSQL 把秒轉成時分秒時間

公司給客戶的網頁上..
有一些資料是用秒來儲存的.
但是為了方便用戶瀏覽的關係..我們便耐要把資料轉換成 時:分:秒 HH:MM:SS
來顯示給用戶看..

由於自己不太熟識ASP.net MVC的關係..
所以不太懂怎樣用WebGrid的來顯示時:分:秒

所以我便決定在取資料時做一個資料轉換..
怎樣可以在資料庫把秒轉換成時間

大家可以用以下的方法

解決方法:
寫一個function 把時間轉換便可以了
可以用一個簡單的方程式來轉換..
十分簡單:

-- =============================================
-- Author:		[Share Chi Wai]
-- Create date: [2011-09-07]
-- Description:	[This function is used to convert Second to Time HH:MM:SS]
-- =============================================
CREATE FUNCTION [dbo].[ConvertSecondToHHMMSS]
(
	-- Add the parameters for the function here
	@Second INT =0
)
RETURNS VARCHAR(15)
AS
BEGIN
	-- Declare the return variable here
	DECLARE @HHMMSS VARCHAR(10)

	-- Add the T-SQL statements to compute the return value here
	DECLARE @HH VARCHAR(5)
	DECLARE @MM VARCHAR(2)
	DECLARE @SS VARCHAR(2)

	IF LEN((@Second / 3600))<2
	BEGIN
		--當時間小於雙隻數時..加上一個0
		SET @HH = RIGHT('0'+Convert(VARCHAR(5),(@Second / 3600)),2)
	END
	ELSE
	BEGIN
	--取時
		SET @HH = Convert(VARCHAR(5),(@Second / 3600))
	END

	--取分
	SET @MM = RIGHT('0'+Convert(VARCHAR(3),(@Second % 3600)/60),2)
	--取秒
	SET @SS = RIGHT('0'+Convert(VARCHAR(3),@Second % 60),2)
	--把時/分/秒 轉成正常格式
	SET @HHMMSS=  @HH +':' +@MM +':'+ @SS

	-- Return the result of the function
	RETURN @HHMMSS

END
GO

我們可以用以下方法執行這個功能

SELECT dbo.ConvertSecondToHHMMSS (123)

tsql convert second to HH:MM:SS
Hope you find it useful