圖書著作權
原出版社:Microsoft Press
內容簡介
本書適合於專業資料庫開發者、BI開發者、DBA和以SQL Server作為後台資料庫的一般應用程式開發者。本書不僅適合SQL Server 2005的初級讀者,也適合SQL Server 2005的中高級讀者。讀者可以從中獲得最優的方法、務實的建議和實例代碼來幫助他們掌握創建和維護企業級關係資料庫所需的複雜技術。本書是所有SQL Server 2005用戶的案頭必備之書。
作者簡介
Kalen Delaney是Solid Quality Learning的創建人之一,並且從事SQL Server的工作已有19年,從1987年起開始受僱於Sybase 公司。
1992年,在從舊金山海灣搬家到美麗的太平洋西北部之後,Kalen成為一名獨立的培訓師和顧問。在隨後的幾年裡,她和微軟及Sybase公司一起開發課程並為他們的技術支持員工提供內部培訓。
1998年,Kalen為微軟的產品支持團隊開設了一門內部課程,以幫助他們學習SQL Server 7的內部工作原理和新特性。她還為SQL Server 2000開展了一個類似的課程。在很多年裡,Kalen把這些課程傳授給位於全美和全世界的眾多微軟的辦公室相關人員和合作夥伴。現在她為自己的顧客提供SQL Server 2005體系結構、內部實現和查詢調校的課程,這些你可以在Solid Quality Learning的網頁上找到。
1995年,微軟授予了Kalen MVP(最有價值的專家)的稱號,因為她參與了在微軟的新聞伺服器上的SQL Server公共幫助論壇。現在,她仍然定期參與公共論壇,解答與SQL Server 內部實現和行為有關的許多問題。
在1999年初,她被邀請參加成立一個非營利性的、國際的SQL Server用戶組的最初計畫委員會。以那個計畫委員會為基礎,SQL Server專業組織(Professional Association for SQL Server,PASS)誕生了。她頭兩年擔任“Program Development”部門的主管,並於1999年10月在芝加哥舉行的開幕會議上作了演講。從那以後,她在每屆的PASS會議上都作了講話。
在2002年,Kalen和她的5位同事創建了屬於他們自己的公司,致力於提供世界上最先進的SQL Server培訓。在隨後的4年多的時間裡,Solid Quality Learning已經發展成為一個擁有來自世界各地的40多名SQL Server專家的公司。
前言
這是一部開創性的著作。它對SQL Server資料庫引擎的體系結構進行了描述。Kalen Delaney的上一本描述SQL Server 2000的書一直在我的辦公桌上,同樣被大多數SQL Server的專家們所使用。無論什麼時候,當你需要簡明描述某件事情是如何工作的或者系統某個方面的設計原理時,都可以參考這本書。確實,大多數SQL Server的設計者和開發者都使用Kalen的書作為參考。所以Kalen一直被我們的一個問題所糾纏:“我們什麼時候能夠看到一本SQL Server 2005的書出版?”
剛剛讀完校樣,我終於明白這本書為什麼花了那么長時間。它不是上一本書的修訂,許多地方都已經改變,並且Kalen擁有如此多的新專題去寫一本全新的書。她和設計師們密切聯繫以理解新的設計,然後再把這些設計以她那簡明準確的風格描述出來。這個結果值得等待。這本書內容豐富廣博,我從內部觀察SQL Server 2005的開發,有時還參與到設計的討論中去。儘管如此,我還是不能理解這么大的一個體系中的許多內容。在讀這個校樣的過程中,我學到了許多東西。我將在最近幾年的時間裡重讀這些章節來加深我的理解。
這本書解釋系統是怎樣工作的,並且讓你對設計者的意圖有一個深刻的理解——例如深入探討頁面格式、解釋分配策略、臨時表和表變數的不同、快照隔離級別是如何工作的、恢複選項、目錄視圖、隔離級別及其實現等等。這些描述深刻、簡明,而且容易接受和便於理解。一直以來,這本書在應用程式設計、資料庫設計、物理數據布局和性能調校方面都給出了明智的建議。
從巨觀來看,SQL Server在線上叢書描述存在些什麼;許多書描述怎樣使用那些存在的特性;這本書描述了資料庫引擎特性背後的設計原理,以及它們是怎樣工作的。在我們理解這些原理和機制後,就可以經常推斷出如何工作會工作得很好,以及如何工作將會出現問題。所以我誠懇地將這本書推薦給那些需要涉及SQL Server 2005系統的設計、實現或處理的人們。
Jim Gray
Technical Fellow,Microsoft Research
1999ACM 圖靈獎獲得者
引言
我認為創作和出版一本書最大的樂趣是獲得讀者的反饋。最鬱悶的事當然是收到讀者們來信抱怨本書沒有包含他們最關心的主題。然而經過再三考慮我認為自己必須接受的事實是這本書不能包攬一切,雖然我也希望它能夠這樣。SQL Server 2005是一個非常龐大、複雜的產品,我們即使使用多本專著也很難涵蓋到它的每一個特性。我希望讀者們能夠把這本書看作一個半滿而不是半空的杯子,並能夠欣賞《Microsoft SQL Server 2005技術內幕》各冊所包含的信息。至於沒有涵蓋到的一些主題,我希望讀者們可以從地方獲得所需的信息。
這部叢書所關注的焦點就隱含在其名字中,就是SQL Server的核心引擎,特別是查詢處理器和存儲引擎。這部叢書不會討論客戶端編程接口、異構查詢和商業智慧型及複製。實際上大多數針對高可用性的特性本叢書都沒有涉及,僅僅討論了其中少數幾個特性,例如鏡像(當討論資料庫屬性設定時會從上層架構對其進行描述)。這裡也沒有對一些內部操作例如安全性進行深入論述——這樣的話我必須為該叢書再增撰十冊,並且這在該產品的下一個版本發布之前是不可能完成的。
Microsoft SQL Server技術內幕叢書的歷史
Microsoft SQL Server技術內幕的第一版是針對6.5版本而寫的,它確實嘗試了涵蓋該產品的幾乎所有特性。不過那時的產品規模相當小。另外當時也很少有關於該產品的其他書籍,所以原創作者(Ron Soukup)當時無法向讀者推薦關於特定主題的書籍。儘管如此,第一卷也沒有能夠涵蓋到每一個主題,包括複製和安全性。Ron也沒有討論備份和還原SQL Server資料庫的細節,並且實際上也沒有探討事務日誌的使用和管理。
從SQL Server 7.0開始我接管了這本書,並且因為整個存儲引擎都已經改變了,所以我完全重寫了描述存儲引擎內部的各個部分。在SQL Server 7.0中,頁面結構、索引組織和鎖定資源的管理都與之前的版本完全不同。
《Microsoft SQL Server 7.0技術內幕》的其中一章對事務、存儲過程和觸發器進行了討論。對SQL Server 2000版本,因為增加了針對用戶定義函式的新特性和新的觸發器功能,所以我將其分為兩章。在7.0版本中,有一個龐大的章節討論查詢處理和調校,SQL Server 2000版本則將這些主題分為兩章。其中一章是關於查詢處理的內部實現和SQL Server最佳化器的工作機制,另一章則為如何編寫性能更好的查詢提供了指導。《Microsoft SQL Server 2000技術內幕》還涵蓋了關於事務日誌工作原理的許多細節,以及對備份和還原操作期間日誌是如何使用的進行了深入討論。
叢書結構
早在《Microsoft SQL Server 2005技術內幕》的策劃階段,我就意識到用一冊書來涵蓋我所希望的一切是不現實的。我最初的想法是用一冊書來討論存儲引擎組件和實際的數據管理,用第二冊來討論如何使用T-SQL語言和最佳化查詢。不久我就發現第二個主題實在太大以至於不能用一冊書來完成,部分是因為SQL Server 2005提供了非常多的新的T-SQL特性。因為對新的編程結構的充分討論需要單獨一冊書才能完成,所以我邀請了T-SQL大師Itzik Ben-Gan來創作一冊針對SQL Server 2005的T-SQL專著。Itzik是一位多才的作家,在我尚未完成對存儲引擎這冊書的規劃之前他就已經完成了500多頁的內容。這時,他意識到T-SQL語言這個主題太大以至於需要兩冊書來涵蓋所需要的內容。這樣,《Microsoft SQL Server 2005技術內幕》就變成了一部四冊的專著。
雖然我們的目標之一是儘量減少各冊之間的重疊以便整套叢書的讀者在閱讀該叢書時不會讀到重複的內容,但是我們意識到不是所有的讀者都會從同一冊開始閱讀。因為Itzik和我使用不同的方法來描述SQL Server查詢處理、索引使用和性能調校,所以實際上那些在多冊書中被重複討論的主題對幫助讀者理解是相當有益的。
《Microsoft SQL Server 2005技術內幕:T-SQL查詢》
T-SQL查詢這冊書描述了T-SQL查詢語言的基本結構,並對邏輯的和物理的查詢處理進行了徹底討論。該書介紹了一套查詢調校的方法。Itzik對所有新的T-SQL查詢結構的使用和行為進行了細緻的討論,這包括CTE、PIVOT和UNPIVOT操作符,以及分級函式。他討論了對TOP從句的增強,還提供了一些例子來介紹一些新的並且很有用的方法來為我們的查詢加入集合操作。對數據修改操作符的新功能(INSERT、UPDATE和DELETE)也進行了深入描述。
《Microsoft SQL Server 2005技術內幕:T-SQL程式設計》
《T-SQL程式設計》這本書重點論述了T-SQL語言的可程式特性,並涵蓋了對SQL Server套用中的事務、存儲過程、函式和觸發器的規劃和使用。Itzik比較了分別基於集合與游標的編程技術並描述了如何確定哪一種技術更加合適,並且他還比較了CLR與關係編程並描述了哪一種技術更加適合哪一種活動。該書涵蓋了臨時對象的使用並探究了SQL Server 2005中新的錯誤處理功能。Itzik討論了使用多種數據類型的主體,包括XML數據類型和用戶定義的CLR數據類型。最後,本書中有一章是關於SQL Server Broker的,它能夠在資料庫應用程式中支持可控異步處理。
《Microsoft SQL Server 2005技術內幕:存儲引擎》
您手中的這本書涵蓋了SQL Server 2005的存儲引擎。開始創作本書的時候,我先是從《Microsoft SQL Server 2000技術內幕》中取出一些與存儲引擎主題相關的章節,然後再確定要涵蓋哪些合適的特性。但很快我就意識到需要進行一些重新組織,這時我已經完成了完整的兩章,分別是關於體系結構的一章和事務日誌的一章。如同先前所有版本一樣,我深入研究了數據檔案中數據和索引的實際物理存儲,並描述了檔案空間的分配和管理。還介紹了一些沒有正式公布的跟蹤標記和DBCC命令,它們可以用來在合適的場合描述某些特性並幫助我們確認對SQL Server行為的理解是正確的。
在論述到SQL Server 2005中的新特性時,我會將其一一指出,下面是本書所細緻涵蓋的一些最重要的新特性。請注意,我們並不會對本書提到的所有的新特性都進行深入討論。
■SQL Server 2005元數據視圖,包括兼容性視圖、目錄視圖和動態管理視圖(和函式)。
■資料庫快照。
■用戶/架構分離。
■大數據對象存儲,包括行溢出數據和varchar(MAX)數據。
■分區表和索引的存儲。
■在線上索引創建和重建。
■快照隔離和行級版本控制。
《Microsoft SQL Server 2005技術內幕:查詢調校和最最佳化》
本叢書的最後一冊將是基於對真實世界中的SQL Server 2005的運行方式的觀察,並將闡述如何最大限度地在真實的套用中利用該產品。這將是由多個作者完成的著作,每個作者負責他最擅長的領域。涵蓋的主題將會包括:
■確定什麼地方需要進行調校的方法論。
■最佳化器是如何確定理想的查詢計畫的。
■使用SQL Server Profiler來監視SQL Server 2005。
■查詢計畫的快取和重用。
■強制查詢計畫。
■分區和索引視圖的最優方法。
■選擇最佳索引。
■取回查詢結果和數據修改的提示和技巧。
例子和腳本
本書所描述的很多特性和行為都是通過T-SQL代碼來描述的。其中一些代碼只有短短數行,但是另外一些例子則需要相當複雜的編碼,包括對一些動態管理視圖進行連線的多種方法,所有這些都非常長並且很難列印出名字。
所有較長的示例代碼都可以通過關聯站點進行下載。
未被涵蓋的主題
我曾經提到過即使是使用四冊書,也不能涵蓋該產品的某些特性和方面。同時必須牢記,本叢書並不是教資料庫管理員和應用程式開發者“如何做”的圖書,而是闡述SQL Server幕後是如何工作的資料。 本叢書可以幫助讀者擁有創建和診斷基於SQL Server的應用程式的堅實基礎,並幫助理解SQL Server各種行為背後的原因。
除了商業智慧型(Analysis Service、Integration Service和Reporting Service)和高可用性(複製、資料庫鏡像、日誌傳送和集群),超出本書討論範圍的主題包括:
■Notification Services。
■XML索引。
■全文檢索。
■客戶端編程接口。
免責條款
為了描述SQL Server的一些行為,本書對一些沒有正式公布的產品特性和對象進行了討論,例如內部表。其中一些是讀者自己有可能通過查看所支持的函式、存儲過程和視圖的定義發現的。在這些情況下,我只是通過向您提供一些您自己最終也會發現的信息而為您節約時間。另外一類未正式公布的特性是未正式公布的DBCC命令和跟蹤標記,我在這裡介紹它們只是為了對產品的某些行為進行更為細緻的觀察和深入的分析。除非有他人告知,大多數人是不能自己發現這類特性的。請一定牢記,未正式公布意味著不被支持。這就意味著如果讀者對這些未正式公布特性有額外的問題,那么是不能通過致電微軟客戶支持服務中心來獲得客戶代表對這些問題的解答的。同時也不能保證一個未正式公布的特性會繼續出現在下一版本的產品中。在某些情況下,未正式公布的特性會在一個Service Pack中改變行為,並且微軟沒有責任來通過readme檔案或知識庫文章來通知這一變化。在本書中當提到未正式公布的特性或工具時我會加以聲明,並且在某些情況下我會重複強調微軟不提供對它們的支持。請記住,該警告適用於本書中涉及的所有微軟未正式公布的特性。
如何獲得支持
我們已經盡了一切努力來保證本書內容的準確性。如果您遇到問題,請參考下面的資源。
關聯站點
雖然我希望本書沒有任何錯誤,並且請微軟的SQL Server團隊成員審閱了此書,但是該書仍然不是完美的,事實上也不存在這種完美無缺的書。對本書的更新和校正將會被張貼在關聯站點上。另外,如果發現任何您認為不正確的地方,您隨時都可以使用該站點提供的反饋表與我取得聯繫。
微軟學習站點
微軟為各種圖書的校正提供了站點地址
我們可以直接連線微軟學習知識庫並查詢我們所遇到的問題。
除了向作者傳送反饋,讀者還可以通過使用下面的方法向微軟傳送評論或問題。
郵局郵件:
Microsoft Learning
Attn: Inside Microsoft SQL Server 2005 Editor
One Microsoft Way
請注意上面的地址並不提供產品支持。要獲得SQL Server產品支持請打開站點。我們還可以致電來獲得標準支持服務,工作時間為周一到周五6AM-6PM太平洋時間,我們還可以搜尋微軟線上支持。
雖然本書可能沒有涵蓋所有您所感興趣的主題,但是我還是希望您能夠從本書中找到有價值的信息。您可以告知我您所希望進一步學習的主題,我可能會向您推薦一些圖書或者白皮書,也可能會通過SQL Server Magazine發表一篇相應的文章。您可以通過Web站點來聯繫我。
推薦序
有信息界諾貝爾獎美譽的圖靈獎(Turing Award)得主Jim Gray在英文版推薦序中說道:“若論微軟 SQL Server方面的最重要著作,大概非 Inside Microsoft SQL Server 系列叢書莫屬。自SQL Server 6.5 發布以來,常駐在專業 SQL Server 開發者、DBA案頭的就是對應各版本的該系列叢書了。”
由於 SQL Server 2005 大幅改版,新增了大量的功能,讓原本極為厚重的 Inside Microsoft SQL Server類圖書再無法以單行本形式出版,而改為四本合集的系列叢書。本書的執筆者為先前Inside Microsoft SQL Server 各版本的作者 Kalen Delaney。在Inside Micosoft SQL Server 2005 系列的四本書中,她改任叢書編輯,並親自執筆撰寫本書。
翻開本書即看到 Kalen Delaney 的致謝,她對本書的嚴謹要求,以及參與該書寫作的作者隊伍的實力讓人嘆為觀止。大概很少有書有如此多的官方技術人員親自參與寫作,並提供技術諮詢和技術審校。此外,本書還有微軟出版社的編輯負責審稿,以及她的同事的大力相助。或許,要撰寫SQL Server 這類大型產品的相關書籍還真需要人脈廣、經驗足才行。
筆者長年在企業間解決 SQL Server 的問題,例如不會用、性能不佳、無法擴充、不穩定、不安全等,其中最主要的原因是用戶不夠了解產品。尤其是一般人存有誤解,以為 SQL Server 不需要專業的學習與管理,像Office等產品比較容易使用。若執行起來不如預期,他們便認定產品本身能力不足。其實不然,SQL Server 在世界各地都已經進入企業關鍵系統,數以兆(tera)計的數據量比比皆是。而我們所欠缺的是深入的知識與經驗,以發揮 SQL Server 的各種功能。想善用 SQL Server,先要了解它是怎么辦到的,此書便是鑽研其設計原理的最佳途徑。
相信常用資料庫管理與開發的人員大都熟悉資料庫、數據表或創建索引、管理事務。但對存儲引擎(Storage Engine)如何實際完成你的要求,卻諱莫如深。本書深入剖析了該服務的運作原理,讓你既知其然也知其所以然。
本書鎖定數據引擎的基礎運作,例如資料庫的設定與數據實際在硬碟的擺放、索引結構、事務與鎖定等。書中除了解釋設計理念與運作原理外,還輔之以測試驗證的方式。因此,本書中蘊含了許多官方檔案沒有說明的技巧,如查詢特定的動態管理視圖,執行各種 DBCC 指令,如 DBCC IND、DBCC PAGE等各種跟蹤標記等。藉以解釋 SQL Server 如何使用 CPU、記憶體、硬碟與網路等硬體資源,數據表、索引頁、事務記錄的結構,數據在新增、修改、刪除的過程中對實體存放的影響,事務與鎖定的運作原理等。
由於 SQL Server 2005 提供了非常多的服務,如 Database Services、Analysis Services、Reporting Services、Notification Services、Integration Services 等,讓SQL Server 像個品牌,如同Office 一樣,它涵蓋了非常多單一的產品。再加上諸多版本,如 Enterprise、Standard、Workgroup、Developer、Express等,還有 32 或 64 位的差異,讓安裝 SQL Server 變得複雜。一般的新用戶恐怕連需要安裝哪些服務、各安裝步驟的意義及它們對其後系統執行時的影響都一知半解。本書的第1章從安裝與升級開始談起,可見得 SQL Server 2005 的安裝都變得有學問了?
SQL Server 的資料庫服務由多個組件所組成,可大致分為協定訪問層、關係引擎(Relational Engine,一般也稱為查詢處理器 Query Processor)、存儲引擎、SQL 核心等部分。本書的第2章先概略介紹這些組件的定位,好讓讀者知道本書所討論的重點——存儲引擎在整體 SQL Server 資料庫服務中所占的位置。
SQL Server 伺服器實例和資料庫皆提供了相當多的設定,但由於默認值已經符合大多數的使用情境,因此 SQL Server DBA們大都不會深究這些設定。但隨著使用人數增多,數據量增大,安全需求提高,這些設定就變得非常重要。本書的第3章和第4章詳細解說了這些設定。另外,如何搶救受損的資料庫,如何有效使用 tempdb 系統資料庫,以及SQL Server 2005 所新增的 Database Snapshot、Schema 等功能也是重點。
為維護數據更新時的完整性,SQL Server 通過放在硬碟上的事務記錄(transaction log)先行記載變更,再批次更新到數據檔案中。但又為了執行效率與穩定,必須設計一系列精細的運作。而管理者需要熟悉這些運作,以提供足夠的硬碟空間,並設計資料庫備份的策略。本書第5章探討了事務記錄的運作方式,並剖析了備份還原的設計。
數據表是實際存放數據的地方,也就是一切訪問的核心。如何有效地切割數據欄位,精確地使用數據格式,設定各種維護數據正確性的條件約束(Constraint)等都是資料庫管理員和程式設計人員所需要謹慎考慮的。本書第6章詳細解釋了系統數據表、系統視圖與元數據、數據實際在硬碟上的擺放方式、各種數據類型對儲存的影響及修改既有的數據表設計。
索引是有效使用資料庫引擎最重要的議題之一,但建立與維護索引並不是一件容易的事。索引建少了,查詢效率不好;建多了,將影響新增、修改、刪除等操作。什麼欄位該建,是否要對該欄位、視圖建索引?建立索引將耗掉多少硬碟資源等都是資料庫管理員所必備的知識。本書第7章占據了全書最大的篇幅,詳細解釋了索引的組織結構、聚集(Clustered)和非聚集(Nonclustered)索引的差異、數據分割(Partition)、SQL Server 創建和維護索引的方式。管理員應注意的數據不連續與索引重整等議題。
當多人或多個批處理同時訪問相同範圍的數據時,事務與鎖定就變得很重要。SQL Server 2005 在此版加入了“記錄版本(row versioning)”功能,本書作者稱為“樂觀並行”(Optimistic concurrency),而稱呼經由資源鎖定的並行處理為“悲觀並行”(Pessimistic concurrency)。SQL Server 2000以前的版本僅支持悲觀並行。“記錄版本”保留記錄最後完成事務的值,供用戶查詢,讓查詢的工作不影響修改的工作,反之亦然。而不像以往通過資源鎖定的方式,在默認的事務級別下,正在讀的記錄不能改,正在改的記錄不能讀。而不管是哪一種並行處理,本書第8章都提供了深入的解釋,這是多人同時訪問時,性能好壞的關鍵因素之一。
本書不是入門書,不會一步步引導你如何操作。若你尚不了解 SQL Server,玩得不深,學習本書可能就顯得沉重了些。而就算你是專業的 SQL Server 管理師,我相信本書依然是蠻難啃的。因為作者解釋的大都是 SQL Server 底層的運作原理,少有操作講解。為了解釋,在書中提供像字典似的列表,並輔之以示意圖。讀起來枯燥無味,但面臨問題時,是深入探究的起點。
雖然章節間沒有必然關係,但整本書的順序還是從基礎到高級,因此從第1章看起是比較好的。快速瀏覽過各章節的內容後,在實際工作時,碰到需要深入研究的問題,再回來溫習書中所解釋的原理。對於讀不懂的章節不要沮喪,大部分的人應該都跟你一樣,待更有經驗且有空時,重新讀過,相信會有不同的收穫。
若你已經是 SQL Server 2000 的高手,這本書依然適用。我建議你瀏覽與精讀並用,遇到熟知的部分快速翻閱,但讀到 2005 新增的部分,就需要手腦並用。既詳讀文章,又在 SQL Server 2005 上操作一遍,確認你真的讀通了。此刻,你已再上層樓。
胡百敬
2007.6.25於台灣
譯序1
經過四個半月的不懈努力,本書的中文版終於與廣大讀者見面了。正如圖靈獎獲得者Jim Gray所說,“這是一部全新的創作”。與SQL Server 2000相比,SQL Server 2005可以稱得上是一個全新的產品。但本書卻秉承了作者一貫的從讀者出發,論述深入淺出、通俗易懂的風格。我從事資料庫研究和故障診斷已有多年,第一次閱讀本書便被它優雅的風格所深深吸引,因此很快就決定接受博文視點的邀請,用我們的母語將該書翻譯出來,與大家一同分享。
SQL Server 2005的誕生歷時五年,參與的開發人員高達5 000多人,幾乎是完全重新設計,在實現了所有已有功能的基礎上,添加了難以計數的新特性。微軟憑藉SQL Server 2000站穩了中小型DBMS市場的腳跟,而SQL Server 2005則肩負了與Oracle逐鹿大型DBMS市場的使命。事實上,SQL Server 2005兩年來在大型DBMS的市場增長速度確是超群脫俗。在這種背景下,創作一本深入論述該產品的著作無異於平地起高樓,難度和工作量都非常巨大。作者利用她與微軟的淵源,與SQL Server產品組的設計和開發人員進行了長期深入而廣泛的溝通,確保了本書的內容是真正的“內幕”。由於SQL Server的龐大和複雜,作者非常聰明地避免了面面俱到的介紹,而是直指核心。將篇幅用在了刀刃上,重點論述了SQL Server 2005核心引擎的工作原理。為了便於讀者理解,除了通俗易懂的語言,作者還非常善於使用直觀的示意圖和簡明的代碼來說明問題。
本書深入探討了頁面格式,解釋分配策略、臨時表和表變數的不同,快照隔離級別是如何工作的,恢複選項、目錄視圖、隔離級別及其實現,並細緻涵蓋了元數據視圖、資料庫快照、用戶/架構分離、大數據對象存儲、分區表和索引的存儲、在線上索引創建和重建、快照隔離和行級版本控制等SQL Server 2005新特性。本書適合所有希望深入了解SQL Server 2005核心引擎內部運行原理的研究人員、設計師、開發者和資料庫管理員(DBA),還有高等院校中研究方向為資料庫的本科高年級學生和研究生。如果您是資料庫方面的專業人士,那么我建議您可以直奔主題,直接閱讀您所感興趣的章節;如果您對自己的專業知識不是很有信心,那么建議您在第一遍閱讀時可以不求甚解,快速瀏覽本書。因為各個章節其實是環環相扣的,聯繫起來看可以幫助理解。然後再讀第二遍、第三遍,相信每讀一遍您都會有巨大的收穫。
本書的翻譯工作歷時四個半月,不是我們這些譯者懶惰,而是因為翻譯工作完全是利用晚上和周末的業餘時間完成的。不過現在回想起來,這些日子裡除了夜夜青燈的辛苦,一杯香茗字斟句酌譯佳作的經歷也不失為一種樂趣。本書的第3、7、8章是方磊先生翻譯的,第6章是由揭磊駿先生完成的,第2章是由我和方磊先生共同翻譯的,其餘各個章節和正文以外的部分均由我執筆。譯稿的審閱由劉瑩女士負責。我們合作得非常愉快。
本書的作者Kalen Delaney是世界範圍內第一流的SQL Server產品專家,有著近20年豐富的培訓和寫作經驗。將她的作品信、達、雅地呈現為中文,對我們來說實在是一個很大的挑戰。在翻譯過程中,我們一方面儘量保持原書的風格,儘量減少因翻譯對原書質量的影響,對原書中的部分術語和疑難語句都查閱相關資料並仔細推敲,力求把翻譯做到最好;另一方面,我們對所發現的原書上的一些排版和技術性的錯誤,在參考本書官方網站上的勘誤表後都作了更正。儘管我們已經非常努力,但由於時間和水平有限,翻譯中的錯誤和不當之處仍在所難免。歡迎大家對本書的翻譯提出寶貴意見,您可以傳送電子郵件與我取得聯繫。
感謝博文視點公司編輯楊福川的邀請,與博文視點合作我感到非常愉快。感謝方磊、揭磊駿、劉瑩,沒有你們,我無法單獨完成這項工作。最後,我還要特別感謝家人對我的工作的支持。
聶偉
2007年6月於上海
譯序2
“如果將技術書籍與武俠小說中的武功秘籍做一個類比,那么本書就是修煉內功根基的寶典。”
這是一本隨SQL Server一起發展和成長起來的經典圖書。對於曾經從Inside SQL Server 2000入門並受益匪淺的我們來說,非常榮幸能夠成為本書新作系列的譯者之一,至今仍感到欣喜和激動。本書作為新作系列的其中一卷,它向讀者深入地介紹了SQL Server 2005中的存儲引擎。“工欲善其事,必先利其器”,相信通過本書的學習,能夠幫助廣大開發者、資料庫管理員,以及與資料庫相關的專業人士領悟到資料庫設計與維護、災難恢復、故障排除、存儲引擎調優及並發控制的精髓所在,從而能夠更好地使用SQL Server 2005,更大程度地發揮它的作用。
本書的特色在於其與眾不同的視角:從存儲引擎的設計原理出發講述各個組件和新特性究竟是如何工作的。除此以外,還包括了一些官方文檔中未記載的信息,如表和索引的分頁內容、數據修改操作的內部機理、未正式公布的DBCC命令及跟蹤標記等。另外,為了更好地幫助讀者理解存儲引擎的行為,作者Kalen Delaney還在通俗易懂的實例中展示了如何使用SQL Server 2005中新增的一大利器——各種動態管理對象去觀察和追蹤存儲引擎的行為。如果你是一個喜歡追根溯源的人,那么請你一定不要錯過這本寶典。
酒是越陳越香,學習原理的過程也是循序漸進而不可急功近利的。因此,我建議讀者在完成第一遍閱讀以後還能夠將其作為案頭常備,當遇到實際的問題時,拿出來翻一翻,一定會有新的收穫。
由於本書及其前作在業內始終保持較高的聲望,因此翻譯這樣一本“經典”確實讓我們感到很有壓力。因此,我們不敢馬虎,力求完美。但是由於時間和水平有限,譯文難免有不當之處。我們真誠地歡迎讀者批評和指正。
方磊
2007年6月於上海
編輯推薦
本書是Inside Microsoft SQL Server 2000的作者Kalen Delaney的又一經典著作,是Inside Microsoft SQL Server 2005系列四本著作中的一本。本書對SQL Server 2005存儲引擎方面的知識進行了全面而詳細的闡述,包括資料庫檔案、日誌和恢復、表、索引及其管理、鎖定和並發等內容。除了解釋設計理念與運作原理外,書中還輔之以大量簡短而有力的實例。您將跟隨一位廣受歡迎的作家同時也是SQL Server資深專家一起深入探索SQL Server存儲引擎的技術內幕。
本書適合於專業資料庫開發者、BI開發者、DBA和以SQL Server作為後台資料庫的一般應用程式開發者。本書不僅適合SQL Server 2005的初級讀者,也適合SQL Server 2005的中高級讀者。讀者可以從中獲得最優的方法、務實的建議和實例代碼來幫助他們掌握創建和維護企業級關係資料庫所需的複雜技術。本書是所有SQL Server 2005用戶的案頭必備之書。
目錄
前言 I
致謝 III
引言 VII
第1章 SQL Server 2005 的安裝與升級 1
1.1 SQL Server 2005安裝前提 2
SQL Server 2005 版本 3
軟體要求 4
硬體要求 5
1.2 安裝前決策 7
安全性和用戶上下文 7
字元與排序規則 9
排序次序 11
安裝SQL Server的多個實例 15
安裝SQL Server命名實例 16
1.3 做好安裝準備 18
SQL Server 2005升級嚮導 18
1.4 遷移還是升級 20
遷移 20
升級 21
升級後的操作 23
1.5 選擇組件 25
SQL Server資料庫服務(資料庫引擎) 26
Analysis Services 27
Reporting Services 27
Notification Services 27
Integration Services 27
工作站組件、在線上叢書及開發工具 27
1.6 小結 28
第2章 SQL Server 2005體系結構 29
2.1 SQL Server引擎組件 29
觀測資料庫引擎行為 30
協定 31
表格格式數據流(TDS)端點 32
關係引擎 33
存儲引擎 35
SQLOS 39
2.2 記憶體 49
緩衝池和高速數據緩衝區 50
訪問記憶體中的數據頁 50
管理數據高速緩衝區中的頁面 51
檢查點 53
管理其他高速快取中的記憶體 54
調節記憶體大小 56......