I have written a detailed chapter-by-chapter review of this book on www DOT i-programmer DOT info, the first and last parts of this review follow:
The book’s introduction says "This is a book for [SQL Server] DBAs, for things you think they really ought to know…", so how does it fare?
This book is a diverse collection of SQL Server related articles by 15 experienced, but previously unpublished authors. It stems from a collaboration between Midnight DBA, who hatched the idea to collect the tribal knowledge of its community of DBAs and Red Gate Publishing who teamed up with them to produce it. The topics covered range from compression and page-level data content, through to Agile Development and Project Management for DBAs.
Below is a chapter-by-chapter exploration of the topics covered.
Chapter 1 SQL Server Storage Internals 101
This chapter provides an introduction to the physical storage internals within SQL Server. The premise being you should be able to take advantage of this internals knowledge to delivery more optimal solutions.
The chapter starts with a look at rows, discussing the fixedvar format - a structure that details the layout of each record. Next, page layout is examined in terms of the header, body and record offset array. The content of the physical page is described using the DBCC PAGE command.
Heaps and indexes are discussed in relation to what they are, and how they change as their data changes. The problems of fragmentation and forwarded records are described. B-trees are discussed in detail. There’s some useful SQL code for obtaining the number of forwarded rows.
The author uses the information discussed to get a storage capacity estimate. I do wonder if the calculation is a little too complex, since this is an estimate, and various factors could invalidate it (e.g. varying row size and number of rows).
The chapter contains an error using the DBCC IND command, there is no closing quote mark around Person.Person i.e. DBCC IND (AdventureWorks2008R2, ‘Person.Person, 1). Additionally, in investigating sys.database_files, rows are selected WHERE type = 0, but does not say what ‘type = 0’ means (it means files of type ‘row’).
Overall the chapter provides a useful introduction into the content of the rows and pages of a database. Additionally, the overview of heaps and indexes is useful together with the problems that changing data cause.
This is certainly an interesting book, covering a wide range of topics. All the chapters are well written, most are easy to read, and fresh. Some of the topics are offbeat, which itself adds to the book’s interest. Most chapters contain links to additional and deeper information, and many chapters have practical step-by-step examples.
You can download the first chapter of the book here: http://downloads DOT red-gate DOT com/ebooks/SQL/sql-server-storage-internals-101.pdf
The book contains a few basic code and English errors, but nothing too distracting. Cross-referencing between chapters is limited - some chapters end with a conclusion, others with summary, and others with nothing; some consistency would have been helpful. The book’s font was a little large, a more typical font would have reduced the book’s size from 466 pages to around 300 pages, making it more manageable.
I love the concept behind this book, get 15 previously unpublished authors to write about topics they find interesting. They may be new authors, but they are certainly experienced in their field.
The book’s authors have donated their royalties to the charity www DOT computers4africa DOT org DOT uk/, which collects, data-wipes, and refurbishes redundant IT hardware, and sends it to African schools, colleges and selected community projects. So buying the book has the added bonus of helping less-fortunate people.
I enjoyed reading the diverse range of topics in this book, indeed I hope there is a periodic release of this book with new authors talking about subject areas they enjoy.
If you want a fresh look at a diverse range of SQL Server related topics I can certainly recommend this book.