Foreword |
|
ix | |
Preface |
|
xix | |
|
|
1 | (8) |
|
|
1 | (1) |
|
|
2 | (5) |
|
Think Globally; Fix Locally |
|
|
2 | (1) |
|
Partitioning Breaks Bottlenecks |
|
|
3 | (1) |
|
Start-Up Costs Are High; Running Costs Are Low |
|
|
4 | (1) |
|
Render unto Server What Is Due unto Server |
|
|
5 | (1) |
|
Be Prepared for Trade-Offs |
|
|
6 | (1) |
|
Basic Principles and Knowledge |
|
|
7 | (2) |
|
|
9 | (68) |
|
|
9 | (1) |
|
Locking and Concurrency Control |
|
|
9 | (27) |
|
Correctness Considerations |
|
|
12 | (4) |
|
|
16 | (20) |
|
Logging and the Recovery Subsystem |
|
|
36 | (13) |
|
|
37 | (5) |
|
Tuning the Recovery Subsystem |
|
|
42 | (7) |
|
Operating System Considerations |
|
|
49 | (10) |
|
|
50 | (2) |
|
|
52 | (2) |
|
How Much Memory Is Economical |
|
|
54 | (2) |
|
|
56 | (1) |
|
Files: Disk Layout and Access |
|
|
57 | (2) |
|
|
59 | (18) |
|
Tuning the Storage Subsystem |
|
|
59 | (7) |
|
Enhancing the Hardware Configuration |
|
|
66 | (5) |
|
|
71 | (3) |
|
|
74 | (3) |
|
|
77 | (46) |
|
|
77 | (1) |
|
|
77 | (4) |
|
|
81 | (1) |
|
|
81 | (8) |
|
Structures Provided by Database Systems |
|
|
82 | (5) |
|
Data Structures for In-Memory Data |
|
|
87 | (2) |
|
Sparse Versus Dense Indexes |
|
|
89 | (1) |
|
To Cluster or Not to Cluster |
|
|
90 | (12) |
|
Evaluation of Clustering Indexes |
|
|
92 | (4) |
|
|
96 | (4) |
|
|
100 | (2) |
|
Joins, Foreign Key Constraints, and Indexes |
|
|
102 | (3) |
|
Avoid Indexes on Small Tables |
|
|
105 | (1) |
|
Summary: Table Organization and Index Selection |
|
|
105 | (5) |
|
Distributing the Indexes of a Hot Table |
|
|
110 | (1) |
|
General Care and Feeding of Indexes |
|
|
111 | (12) |
|
|
115 | (1) |
|
|
116 | (7) |
|
Tuning Relational Systems |
|
|
123 | (42) |
|
|
123 | (1) |
|
Table Schema and Normalization |
|
|
124 | (13) |
|
|
124 | (1) |
|
Some Schemes Are Better Than Others |
|
|
125 | (2) |
|
|
127 | (2) |
|
A Practical Way to Design Relations |
|
|
129 | (2) |
|
Functional Dependency Test |
|
|
131 | (1) |
|
|
131 | (5) |
|
|
136 | (1) |
|
|
137 | (1) |
|
|
138 | (2) |
|
|
140 | (3) |
|
|
143 | (15) |
|
|
151 | (2) |
|
Rewriting of Nested Queries |
|
|
153 | (5) |
|
|
158 | (7) |
|
|
158 | (2) |
|
|
160 | (1) |
|
|
161 | (1) |
|
|
162 | (3) |
|
Communicating with the Outside |
|
|
165 | (20) |
|
|
165 | (2) |
|
|
167 | (1) |
|
Objects, Application Tools, and Performance |
|
|
168 | (3) |
|
|
169 | (2) |
|
Beware of Application Development Tools |
|
|
171 | (1) |
|
Tuning the Application Interface |
|
|
171 | (8) |
|
Avoid User Interaction Within a Transaction |
|
|
172 | (1) |
|
Minimize the Number of Round-Trips Between the Application and the Database Server |
|
|
172 | (2) |
|
Retrieve Needed Columns Only |
|
|
174 | (1) |
|
Retrieve Needed Rows Only |
|
|
175 | (1) |
|
Minimize the Number of Query Compilations |
|
|
176 | (3) |
|
|
179 | (1) |
|
Accessing Multiple Databases |
|
|
180 | (5) |
|
|
183 | (2) |
|
Case Studies from Wall Street |
|
|
185 | (28) |
|
Techniques for Circumventing Superlinearity |
|
|
185 | (3) |
|
Perform Data Integrity Checks at Input Time |
|
|
188 | (1) |
|
Distribution and Heterogeneity |
|
|
188 | (5) |
|
Interoperability with Other Databases |
|
|
188 | (2) |
|
|
190 | (2) |
|
Managing Connections Socialistically in a Distributed Setting |
|
|
192 | (1) |
|
Trading Space for Time in History-Dependent Queries |
|
|
193 | (1) |
|
Chopping to Facilitate Global Trades |
|
|
194 | (1) |
|
|
195 | (1) |
|
|
195 | (1) |
|
Disaster Planning and Performance |
|
|
196 | (5) |
|
Keeping Nearly Fixed Data Up to Date |
|
|
201 | (1) |
|
Deletions and Foreign Keys |
|
|
202 | (1) |
|
Partitioning Woes: The Hazards of Meaningful Keys |
|
|
203 | (1) |
|
|
203 | (10) |
|
|
203 | (1) |
|
Regular Time Series and Statistics |
|
|
204 | (1) |
|
Irregular Time Series and Frequency Counting |
|
|
205 | (1) |
|
|
206 | (1) |
|
|
207 | (2) |
|
|
209 | (1) |
|
|
210 | (3) |
|
|
213 | (30) |
|
|
|
213 | (4) |
|
A Consumption Chain Approach |
|
|
214 | (3) |
|
|
217 | (1) |
|
How to Gather Information: The Tools |
|
|
217 | (9) |
|
|
217 | (4) |
|
|
221 | (2) |
|
|
223 | (1) |
|
|
224 | (2) |
|
|
226 | (5) |
|
Finding ``Suspicious'' Queries |
|
|
226 | (1) |
|
Analyzing a Query's Access Plan |
|
|
227 | (2) |
|
Profiling a Query Execution |
|
|
229 | (2) |
|
Are DBMS Subsystems Working Satisfactorily? |
|
|
231 | (5) |
|
|
231 | (2) |
|
|
233 | (1) |
|
|
234 | (1) |
|
|
235 | (1) |
|
Is the DBMS Getting All It Needs? |
|
|
236 | (4) |
|
|
237 | (1) |
|
Checking on Disks and Controllers |
|
|
237 | (2) |
|
|
239 | (1) |
|
|
239 | (1) |
|
|
240 | (3) |
|
|
240 | (3) |
|
Tuning E-Commerce Applications |
|
|
243 | (18) |
|
|
243 | (1) |
|
|
243 | (3) |
|
Tuning the E-commerce Architecture |
|
|
246 | (4) |
|
|
246 | (3) |
|
|
249 | (1) |
|
|
249 | (1) |
|
Case Study: Shop Comparison Portal |
|
|
250 | (3) |
|
Capacity Planning in a Nutshell |
|
|
253 | (8) |
|
Capacity Planning Essentials |
|
|
254 | (2) |
|
|
256 | (1) |
|
|
257 | (1) |
|
|
258 | (3) |
|
Celko on Data Warehouses: Techniques, Successes, and Mistakes |
|
|
261 | (14) |
|
|
|
261 | (1) |
|
Forget What the Elders Taught You |
|
|
262 | (5) |
|
Building a Warehouse Is Hard |
|
|
267 | (1) |
|
The Effect on the Bottom Line |
|
|
268 | (7) |
|
|
269 | (2) |
|
|
271 | (2) |
|
|
273 | (2) |
|
|
275 | (26) |
|
What's Different About Data Warehouses |
|
|
275 | (14) |
|
|
276 | (2) |
|
Technology for Data Warehousing |
|
|
278 | (11) |
|
Tuning for Customer Relationship Management Systems |
|
|
289 | (5) |
|
Federated Data Warehouse Tuning |
|
|
294 | (1) |
|
|
295 | (6) |
|
|
297 | (2) |
|
|
299 | (2) |
Appendix A: REAL-TIME DATABASES |
|
301 | (4) |
|
|
301 | (2) |
|
A.2 Replicated State Machine Approach |
|
|
303 | (2) |
Appendix B: TRANSACTION CHOPPING |
|
305 | (20) |
|
|
305 | (2) |
|
|
307 | (5) |
|
B.3 Finding the Finest Chopping |
|
|
312 | (3) |
|
B.4 Optimal Chopping Algorithm |
|
|
315 | (2) |
|
B.5 Application to Typical Database Systems |
|
|
317 | (2) |
|
B.5.1 Chopping and Snapshot Isolation |
|
|
318 | (1) |
|
|
319 | (6) |
|
|
323 | (2) |
Appendix C: TIME SERIES, ESPECIALLY FOR FINANCE |
|
325 | (12) |
|
C.1 Setting Up a Time Series Database |
|
|
326 | (1) |
|
|
327 | (2) |
|
|
329 | (1) |
|
|
329 | (1) |
|
|
330 | (2) |
|
C.6 Oracle 8i Time Series |
|
|
332 | (1) |
|
C.7 Features You Want for Time Series |
|
|
332 | (1) |
|
C.8 Time Series Data Mining |
|
|
333 | (4) |
Appendix D: UNDERSTANDING ACCESS PLANS |
|
337 | (12) |
|
D.1 Data Access Operators |
|
|
339 | (3) |
|
D.2 Query Structure Operators |
|
|
342 | (4) |
|
|
346 | (3) |
|
|
348 | (1) |
Appendix E: CONFIGURATION PARAMETERS |
|
349 | (12) |
|
|
350 | (4) |
|
|
354 | (1) |
|
|
355 | (6) |
Glossary |
|
361 | (26) |
Index |
|
387 | |