23 七月, 2007 11:19
深入頗析微軟 SQL Server 2005 資料庫服務的運作原理
SQL Server 最重要的著作
若論微軟 SQL Server 最重要著作,大概非 Inside SQL Server 系列叢書莫屬了,從 SQL Server 6.5 以來,一直常駐在專業 SQL Server DBA 案頭的,就是對應各版本的這本書。這不是筆者的妄加讚譽,而是素有資訊界諾貝爾獎稱呼的圖靈獎(Turing Award)得主 Jim Gray 在該書的序言所說的。
筆者本身也以讀過該書,代表進入了該版本的世界(例如要熟悉 SQL Server 2000,先讀 Inside SQL Server 2000),以此為深入了解 SQL Server 的指標。而值此年終之際,稍有空閒時日,能專心拜讀此書實是精通 SQL Server 的最佳方式J
由於 SQL Server 2005 大幅改版,大量地新增功能,讓以往出書速度還蠻快的 Inside SQL Server 系列;這次叫大家從 SQL Server 2005 上市後等了近兩年。也由於功能繁多,原本極為厚重的 Inside SQL Server 再也無法以單行本出書,而改為四本合集的系列叢書[1]。在此介紹其中的一本「Inside Microsoft SQL Server 2005 : The Storage Engine」,執筆者為先前 Inside SQL Server 各版本的作者 Kalen Delaney,在此次 Inside 系列討論 SQL Server 2005 的四本書中,她改任系列編輯(Series Editor),並於本書擔任作者。
一翻開書籍前頁,看到 Kalen Delaney 的致謝,立即對本書的嚴謹要求與參與人力嘆為觀止。大概很少書是原廠產品團隊派一群人伺候,提供技術諮詢還要兼審稿,外加微軟出版社的編輯審稿,並有作者所在公司同事的襄助。或許,討論 SQL Server 這類大型產品的書籍還真需要人脈廣,經驗足才能撰寫[2]。
筆者長年在各企業間解決 SQL Server 的問題,例如功能不會用、效能不佳、不穩、不安全等,深覺最主要的原因是使用者對產品的了解不夠。尤其一般使用者存有誤解,以為 SQL Server 不需要專業的學習與管理,像 Office 等產品,隨意架設使用。若執行起來效能不佳,便認定產品本身的能力不足。其實不然,SQL Server 在台灣,乃至於世界各地都已經進入企業的關鍵系統,數以兆(tera)計的資料量比比皆是。而我們所欠缺的是深入的知識與經驗,以發揮 SQL Server 所提供的各種功能。此書便是鑽研 SQL Server 設計原理的最佳管道。
資料庫引擎之堂奧
相信久用資料庫的管理與開發人員大都熟悉資料庫、資料表或索引的建置,交易的管理,但 SQL Server 資料庫儲存引擎(Storage Engine)實際如何完成你的要求,卻諱莫如深。這本書將讓你知其然也知其所以然。
書中除了解釋設計理念與運作原理外,還輔之以測試驗證的方式。因此本書蘊含了許多官方文件沒有說明的技巧,如查詢特定的動態管理檢視、執行各種 DBCC 指令,如 DBCC IND、DBCC PAGE、各種追蹤旗標…等。藉以解釋 SQL Server 如何使用 CPU、記憶體、硬碟與網路等硬體資源,資料表、索引頁、交易紀錄的結構,資料在新增、修改、刪除的過程中,對實體存放的影響,交易與鎖定的運作原理等等。
由於分成了四冊,由 Kalen Delaney主寫的本書其章節不多,僅有八章。鎖定在描述資料引擎的基礎運作,例如資料庫的設定與資料實際在硬碟的擺放,索引結構,交易與鎖定等。
由於 SQL Server 2005 提供了非常多的服務,如 Database Services、Analysis Services、Reporting Services、Notification Services、Integration Services 等,讓筆者覺得 SQL Server 像一個品牌了,有如 Office 一樣,其下涵蓋了非常多個別的產品。再加上一堆的版本,如 Enterprise、Evaluation、Standard、Workgroup、Developer、Express[3],還有 32 或 64 位元的差異,讓安裝 SQL Server 變得複雜。一般新入手的使用者恐怕連需要安裝哪些服務,各安裝步驟的意義,對其後系統執行時的影響都一知半解。本書的第一章從安裝與昇級開始談起,可見得 SQL Server 2005 的安裝都變得有學問了J
SQL Server 的資料庫服務由多個元件所組成,可大分為協定存取層、關聯引擎(Relational Engine,一般也稱為查詢處理器 Query Processor)、儲存引擎、SQL 核心等部份。本書的第二章先概略介紹這些元件的定位,好讓讀者知道本書所討論的重點:儲存引擎,在整體 SQL Server 資料庫服務中所佔的位置。
SQL Server 伺服器執行個體和資料庫皆提供了相當多的設定,但由於預設的設定已經符合大多數的使用情境,因此 SQL Server 管理師們大都不會深究這些設定。但隨著使用人數增多,資料量增大,安全需求提高,這些設定就變得重要。本書的第三章和第四章詳細解說了這些設定。另外,SQL Server 2005 所新增的 Database Snapshot、Schema 等功能也是本章的重點。
為維護資料更新時的完整性,SQL Server 透過放在硬碟上的交易紀錄(transaction log)先行記載變更,再批次更新到資料檔案中。但又為了執行效率與穩定,必須設計一系列精細的運作。而管理者需要熟悉這些運作,以提供足夠的硬碟空間,並設計資料庫備份的策略。本書第五章探討了交易紀錄的運作方式,連帶剖析備份還原的設計。
資料表是實際存放資料的地方,也就是一切存取的核心。如何有效地切割資料欄位,精確地使用資料格式,設定各種維護資料正確性的條件約束(Constraint)…等等,都是資料庫管理師和程式設計人員所需要謹慎考慮的。本書第六章詳細解釋了資料實際在硬碟上的擺放方式,各種資料型態對儲存的影響,以及修改既有的資料表設計。
索引是有效使用資料庫引擎最重要的議題之一,但建立與維護索引並不是容易的事,索引建少了,查詢效率不好,建多了,危害新增、修改、刪除。什麼欄位該建,是否要對計算欄位、檢視建索引?建立索引將耗掉多少硬碟資源等,都是資料庫管理師所必備的知識。本書第七章佔據了全書最大的篇幅,詳細解釋了索引的組織結構,叢集(Clustered)和非叢集(Nonclustered)索引的差異、資料切割(Partition)、SQL Server 建置和維護索引的方式,管理者應注意的資料不連續與索引重整等議題。
當多人或多個批次工作同時存取相同範圍的資料時,交易與鎖定的管理就變得很重要。SQL Server 2005 在此版加入了「紀錄版本(row versioning)」功能,本書作者稱為樂觀並行(Optimistic concurrency),而稱呼經由資源鎖定的並行處理為悲觀並行(Pessimistic concurrency)。SQL Server 2000以前的版本僅支援悲觀並行。「紀錄版本」保留紀錄最後完成交易的值,供使用者查詢,讓查詢的工作不影響修改的工作,反之亦然。而不像以往透過資源鎖定的方式,在預設的交易層級下,正在讀的紀錄不能改,正在改的紀錄不能讀。而不管是哪一種並行處理,本書第八章都提供了深入的解釋,這是多人同時存取時,效能好壞的關鍵因素之一。
本書不是入門書,不會一步步導引你操作。若你尚不了解 SQL Server,玩得不深,本書可能就沉重了些。而就算你是專業的 SQL Server 管理師,我相信本書依然是蠻難啃的。因為作者解釋的大都是 SQL Server 底層的運作原理,少有操作講解。為了解釋,在書中提供像字典似的列表,並輔之以示意圖。讀起來枯燥無味,但面臨問題時,是深入探究的起點。
雖然章節間沒有必然關係,但整本書所設計的順序還是從基礎到衍生,因此從第一章看起是比較好的。快速瀏覽過各章節的內容後,在實際工作時,碰到需要深入研究的問題,再回來溫習書中所解釋的原理。對於讀不懂的章節不要沮喪,大部分的人應該都跟你一樣,待更有經驗且有空時,重新讀過,相信會有不同的收穫。
若你已經是 SQL Server 2000 的高手,這本書依然適用,但可能會缺乏耐心逐字閱讀,因為部分內容是與 2000 重疊的。仍勸你瀏覽與精讀並用,遇到熟知的部分快速翻閱,但讀到 2005 新增的部份,就需要手腦並用了,既詳讀文章,且在 SQL Server 2005 上操作一遍,以確認真的讀通了。
相關閱讀
除了本書外,Inside Microsoft SQL Server 2005 系列叢書中,當下買得到的尚有
l Inside Microsoft SQL Server 2005 : T-SQL Querying。作者:Itzik Ben-Gan、Lubor Kollar 和 Dejan Sarka。微軟出版社出版。
l Inside Microsoft SQL Server 2005 : T-SQL Programming。作者:Itzik Ben-Gan、Dejan Sarka、Roger Wolter。微軟出版社出版。
本書的相關網址:http://www.insidesqlserver.com/,及其系列書籍的相關網址http://www.sql.co.il/books/insidetsql2005/。若你不欲購買本書,或可在該網站逛逛。
推文( 0 )