2013年6月26日 星期三
2013年6月24日 星期一
效能調校(7)-使用 DMV 查詢系統消耗資源
資料庫管理師常常面臨不知 SQL Server 如何使用資源的困擾,尤其是程式開發人員誤用 T-SQL 語法,索引設計不佳、大量來回存取…等,造成多人同時使用時耗盡系統資源,或是互相鎖定等狀況。 但要資料庫管理師抓出元兇,或是分析使用趨勢,利用既有工具程式如 SQL Server Management Studio 所內建的報表、活動監視器、SQL Trace/Profiler、Windows 效能監視器…等,仍力有未逮。 還要再進一步深入分析 SQL Server,則需使用動態管理物件(Dynamic Management Object, DMOs)。
使用優化器提示來改善查詢效能
查詢優化器(Optimizer)
查詢優化器(Optimizer) 是一個 SQL Server 引擎中的元件,負責決定查詢陳述式該如何最佳化執行。 例如 indexes 如何使用、表格排序、合併(JOIN)表格時該如何執行等等。 簡單講,這個元件就是將查詢指令自動最佳化的工具。
提示(Hints)
Hints 是 SQL Server 中的指令,用來告訴 SQL Server 查詢處理器在執行 SQL 陳述式時,應該要強制執行的選項或策略。 當使用 Hints 指令時, Hints 指令可能會覆寫查詢優化器原本預計選取的執行計畫。
2013年6月21日 星期五
校能調教工具
在進行效能調校時,可以使用以下工具對執行工作進行分析或追蹤,以瞭解效能不佳的問題癥結。
- 分析工具:例如 「工作執行計畫」或「Database Engine Tuning Advisor」。
- 追蹤工具:例如 「SQL Trace」和「效能監視器」。
- 記錄工具:例如 「Windows 事件記錄檔」或「SQL Server 錯誤記錄檔」。
2013年6月20日 星期四
順序物件
CREATE SEQUENCE 可以用來建立順序物件(sequence object )。 順序物件是一個由使用者定義的物件,它會根據定義規格產生數值序列。 不同於新增資料時使用的識別資料行(identity),應用程式可以藉由呼叫 NEXT VALUE FOR 函數取得下一個序號,而不需要插入資料列。
2013年6月19日 星期三
分組查詢
GROUP BY 的延伸類型有:
- GROUP BY... WITH ROLLUP
- GROUP BY... WITH CUBE
- GROUP BY..., GROUPING SETS (...), ...
- GROUP BY..., CUBE (...), ...
- GROUP BY..., ROLLUP (...), ...
分析函式
以下幾個分析函數(Analytic Functions)都是 SQL 2012 新增功能。 分析函數會根據資料列群組計算出彙總值。 但不同於彙總函式,其可以傳回每個群組的多個資料列。 您可以使用分析函數計算群組中的移動平均、最新總數、百分比或前 N 個結果。
2013年6月14日 星期五
Service Broker
Service Broker 是 SQL Server 提供的一種訊息佇列(Message Queuing)。 它可以與原本獨立運作的元件結合,共同建立非同步、鬆散偶合的的應用程式。
使用 Service Broker ,讓應用程式開發人員不需要撰寫複雜的通訊和傳訊間隔程式,即可將資料工作負載分散在多個資料庫。 這可減少開發和測試工作,因為 Service Broker 會處理交談內容中的通訊路徑。 此外,還可提升效能。 例如,支援網站的前端資料庫可記錄資訊,並將必須大量運算處理的工作傳送到後端資料庫的佇列中。 Service Broker 可確保所有工作都在同一交易內容中管理,以確保可靠性和技術一致性。
使用全文檢索
全文檢索搜尋是由全文檢索引擎( Full-Text Engine)所提供。 要使用全文檢索,資料庫管理員必須先在給定的資料表上建立全文檢索索引,然後才能在此資料表上執行全文檢索查詢。
全文檢索索引是由資料表中一個或多個欄位構成,這些欄位可以是以下資料類型: char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 或 varbinary(max)。
要使用 SQL Server 的全文檢索查詢資料,大至需要以下四個步驟:
- 安裝全文檢索服務。
- 建立全文檢索目錄。
- 擴展索引(Population)。
- 使用全文索引進行查詢。
2013年6月7日 星期五
使用 FileStream
有許多資料都是未結構化的,如文字檔、圖檔、影音檔。這些資料一般統稱二進位大型物件(BLOB)。 若將這些未結構化的資料儲存在資料庫外面,管理上往往造成許多困擾,所以在 SQL 裡,也提供了 varbinary(max) 型別來存放 BLOG 資料。
在 SQL Server 2008 新增了 FILESTREAM 功能,可以讓 SQL Server 直接存取位於檔案系統上的非結構化資料。 它的方式是使用 varbinary(max) 型別,並整合 NTFS 檔案系統,當你存取 BLOB 資料時,實際上 SQL Server 是存取在檔案系統上資料,而不是存取位於資料庫中的資料。
至於該使用哪一種來作業,來存取 BLOG 資料呢?MSDN 提到: 若儲存的物件平均大於 1 MB,請使用 FILESTREAM varbinary(max); 如果是較小的物件,直接使用 varbinary(max) 將物件資料儲存在資料庫之中通常會提供較好的資料流處理效能。
2013年6月5日 星期三
2013年6月4日 星期二
使用 SQLCLR 和 FileStream
自 SQL 2005 後,SQL Server 開始與 .NET 的 CLR 平台整合,讓 SQL Server 可以輕鬆的使用 .NET 程式語言的強大功能,以擴充 SQL Server 功能性及延展性。
CLR 可以為 SQL Server 撰寫五種擴充功能,分別是:
- 預存程序 (Stored Procedure)
- 自訂函式 (User Defined Function)
- 觸發程序 (Trigger)
- 彙總函式 (Aggregation Function)
- 自訂型別 (User Defined Type)
在資料庫中使用 XML 欄位型別
早期的資料庫管理系統並不支援XML格式的欄位,因此資料庫管理系統本身無法對XML資料做最佳化的儲存與管理,更無法利用XML的查詢功能,例如:XPath語法直接查閱。 現今新版本的資料庫管理系統幾乎都支援XML的資料格式,並且增加特殊指令來處理XML資料,同時亦可直接將關聯式資料轉換成XML階層式的資料做輸出,軟體系統將不必再做資料轉換的動作,即可將關聯式資料以XML格式做處理。