熱門文章

2010年7月17日 星期六

MSSQL 檢查Tempdb


SELECT
name AS FileName,
size*1.0/128 AS FileSizeinMB,
CASE max_size
WHEN 0 THEN 'Autogrowth is off.'
WHEN -1 THEN 'Autogrowth is on.'
ELSE 'Log file will grow to a maximum size of 2 TB.'
END,
growth AS 'GrowthValue',
'GrowthIncrement' =
CASE
WHEN growth = 0 THEN 'Size is fixed and will not grow.'
WHEN growth > 0 AND is_percent_growth = 0
THEN 'Growth value is in 8-KB pages.'
ELSE 'Growth value is a percentage.'
END
FROM tempdb.sys.database_files;
GO

2010年7月16日 星期五

MSSQL 簡單 T-SQL Cursor 範例

DECLARE InvoiceOID_cursor CURSOR FOR
select oid from Invoice
OPEN InvoiceOID_cursor
FETCH NEXT FROM InvoiceOID_cursor INTO @InvoiceOID
WHILE @@FETCH_STATUS = 0
BEGIN
-- PRINT @message
-- delete from XXX where oid = @InvoiceOID
-- Do Something !
FETCH NEXT FROM InvoiceOID_cursor INTO @InvoiceOID
END
CLOSE InvoiceOID_cursor
DEALLOCATE InvoiceOID_cursor

MSSQL 如何更改 tempdb 實體檔案位置

更改位置Script
USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'E:\DB\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'E:\DB\templog.ldf');
GO


完成後可用下方Query檢查是否更改完成。
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');


最後再重啟資料庫即可

MSSQL 清除 Cache 與 Buffers

資料庫測試Query執行時間等數據時。 要特別注意Cache與Buffers的影響,因此在每個Query測試前,須注意先將Cache與Buffers清除。以確保執行不受Cache與Buffers影響。執行Query如下:

DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;
GO

參加MSSQL 考試 70-433

考試時間:155 min
題數:65 題
及格分數:700 分
題型:單選、複選題。
比較特別是,在此門考試進行前,會有數個問題,詢問考生對 SQL Server 在程式開發的經驗,例如:使用過那些資料庫物件等等。

目 前尚未有像在 SQL Server 2005 版本,Exam 70-431:TS: Microsoft SQL Server 2005 - Implementation and Maintenance 有考實作題,讓考生操作 SQL Server Management Studio 管理工具。
這門考試,側重在程式開發上,建議要看懂題目所問的需求為何後,再進行作答,選擇正確的 Transact-SQL 程式碼。

目前尚未有以 Visual Studio 2008 使用 NET Framework 語言撰寫預存程序、觸發程序、使用者定義型別、使用者定義函數、使用者定義彙總及資料流資料表值函數等的程式碼 (VB 或 C#) 之考題。


題型方向: 誠如先前提及的「各項主題的配分比重」
考了數題與 TABLE JOIN、GROUP BY、HAVING、ORDER BY 有關的題目,這類的 DML 陳述式並不困難,但是要看懂題意的需求,會是重點。
再列舉數項給各位參考:
CTE 考了數題。
排名函數也考數題。
XML 也考了不少題目,由 OPENXML 到 XQuery 等。
TRIGGER 包含 DDL、AFTER、INSTEAD OF TRIGGER。
INDEX 也考了不少題目。

其他在 SQL Server 2005、2008 上新增加的功能,也都有考題,例如:DTA、MERGE、Service Broker、PowerShell、TRY...CATCH 等等。

2010年7月15日 星期四

MSSQL 提升SQL的查詢效能和避免Lock發生

要提升SQL的查詢效能,一般來說大家會以建立索引(index)為第一考量
其實除了index的建立之外,當我們在下SQL Command時,
在語法中加一段WITH (NOLOCK)
可以改善線上大量查詢的環境中資料集被LOCK的現象藉此改善查詢的效能。

不過有一點千萬要注意的就是,WITH (NOLOCK)的SQL SELECT 有可能會造成Dirty Read。

例如:
SELECT COUNT(UserID)
FROM EMPLOYEE WITH (NOLOCK)
            JOIN WORKING_GROUP WITH (NOLOCK) ON
            EMPLOYEE.UserID = WORKING_GROUP.UserID

因為SQL Server 會執行對應的鎖定一致性檢查。
欲改善整體資料庫查詢的效能,請將WITH (NOLOCK)加在您的SELECT語法中Table名稱的後面,
雖然(NOLOCK)也可以,但是微軟還是建議大家要加WITH
除了簡單的SELECT之外,有JOIN 的SELECT語法也是可以使用的。
但是DELETE、INSERT、UPDATE這些需要transaction的指令就不行了…

有些文件說,加了WITH (NOLOCK)的SQL查詢效率可以增加33%
本人試的結果…是有快了點,但是33%的效能提升…
我就不太清楚是怎麼算出來的!!

加了WITH (NOLOCK)即告訴SQL Server,我們的這段SELECT指令
無需去考慮目前table的transaction lock狀態,因此效能上會有明顯的提升,
而且資料庫系統的Lock現象會有明顯的減少(包含Dead Lock)。

有一點要特別注意,因為WITH (NOLOCK)不考慮目前table的transaction lock,
因此當有某些資料正處於多個phase交易(例如跨多個table的transaction交易-->如提款系統),
WITH (NOLOCK)會讓目前處理交易process的資料被乎略

講白話一點,也就是說當使用nolock時,它允許閱讀那些已經修改但是還沒有交易完成的資料。因此如果有需要考量transaction交易資料的即時完整性時,使用WITH (NOLOCK)就要好好考慮一下。

如果不需考量transaction,WITH (NOLOCK)或許是個好用的參考

註1:WITH ( < table_hint > )
指定由查詢最佳化器使用的資料表掃描、一或多個索引,
或由查詢最佳化器利用此資料表以及為此陳述式使用鎖定模式。

註2:WITH (NOLOCK)相當於 READ UNCOMMITTED

2010年7月14日 星期三

擔任SQL SERVER 2008的講師

這兩天配合專案而擔任SQL SERVER 2008的講師

分為兩部分
part I 主要是講關於

-- SSMS 開發與管理工具的使用
-- 認識SELECT \ INSERT \ DELETE \ UPDATE 語法
-- 認識分組與彙總

part II 主要是講關於

-- 連結多個資料表
-- 認識子查詢
-- 認識T-SQL語法元素
-- 資料庫的 安全性管理
-- 不同型態資料的匯入和匯出

心得分享:
雖然很累,但非常開心
其中也學到很多,從前置的資料準備
根據聽眾的需求來做調整,到臨場的發揮

語調和語速以及時間要拿捏的很好
好的講師是要能讓聽者聽的清楚明白
這次給自己的分數是70分
有一些細節的地方做的不夠好
希望之後還有機會擔任這個工作!

2010年7月11日 星期日

Microsoft SQL Server 2008 Certifications




Microsoft SQL Server 2008 training courses New Horizons Indianapolis

 

Database Administration

MCTS: SQL Server 2008, Implementation & Maintenance
Certification and Exams
The MCTS SQL Server 2008 Implementation and Maintenance certification candidate must pass a single exam.
Certification Exams
MCTS: SQL Server 2008, Implementation and Maintenance 70-432: TS: Microsoft SQL Server 2008, Installation and Maintenance




MCITP: Database Administrator 2008
Certification and Exams
The MCITP Database Administrator 2008 certification candidate must pass two exams.
Certification Exams
Prerequisite Certification:
MCTS: SQL Server 2008, Implementation and Maintenance

MCITP Certification:
MCITP: Database Administrator 2008
Prerequisite Exam:
70-432: TS: Microsoft SQL Server 2008, Installation and Maintenance

MCITP Exam:
70-450: PRO: Designing, Optimizing and Maintaining a Database Server Infrastructure using Microsoft SQL Server 2008




 

Database Developer

MCTS: SQL Server 2008, Database Development
Certification and Exams
The MCTS SQL Server 2008 Database Development certification candidate must pass a single exam.
Certification Exams
MCTS: SQL Server 2008, Database Development 70-433: TS: Microsoft SQL Server 2008, Database Development

MCITP: Database Developer 2008

Certification and Exams
The MCITP Database Developer 2008 certification candidate must pass two exams.
Certification Exams
Prerequisite Certification:
MCTS: SQL Server 2008, Database Development

MCITP Certification:
MCITP: Database Developer 2008
Prerequisite Exam:
70-433: TS: Microsoft SQL Server 2008, Database Development

MCITP Exam:
70-451: PRO: Designing Database Solutions and Data Access Using Microsoft SQL Server 2008




 

Business Intelligence

MCTS: SQL Server 2008, Business Intelligence Development & Maintenance
Certification and Exams
The MCTS SQL Server 2008 Business Intelligence certification candidate must pass a single exam.
Certification Exams
MCTS: SQL Server 2008, Business Intelligence Development & Maintenance 70-488: TS: Microsoft SQL Server 2008, Business Intelligence Development and Maintenance





MCITP: Business Intelligence Developer 2008
Certification and Exams
The MCITP Business Intelligence Developer 2008 certification candidate must pass two exams.
Certification Exams
Prerequisite Certification:
MCTS: SQL Server 2008, Business Intelligence Development & Maintenance

MCITP Certification:
MCITP: Business Intelligence Developer 2008
Prerequisite Exam:
70-488: TS: Microsoft SQL Server 2008, Business Intelligence Development and Maintenance

MCITP Exam:
70-452: PRO: Designing a Business Intelligence Infrastructure Using Microsoft SQL Server 2008

MSSQL 判斷表格是否被lock

剛在想如果發生交易行為, table 被lock住該怎麼辦?

解決方法:
下指令
dbcc opentran
找到尚未交易結束的id (回傳值)
再下
dbcc inputbuffer(id)
查看是何種語法導致

最後當然是 kill id

將程序結束掉



P.S. 越簡單的東西, 越容易忘掉