Register your product to gain access to bonus material or receive a coupon.
This eBook includes the following formats, accessible from your Account page after purchase:
EPUB The open industry format known for its reflowable content and usability on supported mobile devices.
PDF The popular standard, used most often with the free Acrobat® Reader® software.
This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
The industry’s most complete, useful, and up-to-date guide to SQL Server 2014.
You’ll find start-to-finish coverage of SQL Server’s core database server and management capabilities: all the real-world information, tips, guidelines, and examples you’ll need to install, monitor, maintain, and optimize the
most complex database environments. The provided examples and sample code provide plenty of hands-on opportunities to learn more about SQL Server and create your own viable solutions.
Four leading SQL Server experts present deep practical insights for administering SQL Server, analyzing and optimizing queries, implementing data warehouses, ensuring high availability, tuning performance, and much more. You will benefit from their behind-the-scenes look into SQL Server, showing what goes on behind the various wizards and GUI-based tools. You’ll learn how to use the underlying SQL commands to fully unlock the power and capabilities of SQL Server.
Writing for all intermediate-to-advanced-level SQL Server professionals, the authors draw on immense production experience with SQL Server. Throughout, they focus on successfully applying SQL Server 2014’s most powerful capabilities and its newest tools and features.
Detailed information on how to…
Introduction 1
Who This Book Is For 2
What This Book Covers 2
Conventions Used in This Book 4
Good Luck! 5
Part I Welcome to Microsoft SQL Server
1 SQL Server 2014 Overview 9
SQL Server Components and Features 9
The SQL Server Database Engine 10
SQL Server 2014 Administration and Management Tools 12
Replication 15
Merge Replication 16
SQL Server AlwaysOn Features 17
SQL Server Service Broker 18
Full-Text and Semantic Search 18
SQL Server Integration Services (SSIS) 20
SQL Server Analysis Services (SSAS) 21
SQL Server Reporting Services (SSRS) 23
Master Data Services 23
Data Quality Services 24
SQL Server 2014 Editions 24
SQL Server 2014 Standard Edition 25
SQL Server 2014 Enterprise Edition 26
Differences Between the Enterprise and Standard Editions of SQL Server 26
Other SQL Server 2014 Editions 28
SQL Server Licensing 30
Web Edition Licensing 31
Developer Edition Licensing 32
Express Edition Licensing 32
Choosing a Licensing Model 32
Mixing Licensing Models 32
Licensing SQL Server of High Availability 32
Licensing SQL Server in a Virtual Environment 34
Summary 35
2 What’s New in SQL Server 2014 37
New SQL Server 2014 Features 37
Memory-Optimized Tables/In-Memory OLTP 38
New Cardinality Estimation Logic 38
Delayed Durability for Transactions 38
Buffer Pool Extension 38
SQL Server Data Tools for Business Intelligence 39
SQL Server 2014 Enhancements 39
Resource Governor Enhancements 39
Security Enhancements 39
Backup and Restore Enhancements 40
Indexing Enhancements 40
Monitoring Enhancements 41
SQL Server AlwaysOn and Availability Groups Enhancements 42
New Transact-SQL Enhancements 42
Deprecated and Discontinued Features 42
Summary 45
Part II SQL Server Tools and Utilities
3 SQL Server Management Studio 49
What’s New in SSMS 50
The Integrated Environment 50
Window Management 50
Integrated Help 53
Administration Tools 56
Registered Servers 56
Object Explorer 58
Activity Monitor 60
Log File Viewer 62
SQL Server Utility 64
Development Tools 69
The Query Editor 69
Managing Projects in SSMS 77
Integrating SSMS with Source Control 78
Using SSMS Templates 80
Using SSMS Snippets 84
T-SQL Debugging 85
Multiserver Queries 86
Summary 87
4 SQL Server Command-Line Utilities 89
What’s New in SQL Server Command-Line Utilities 90
The sqlcmd Command-Line Utility 91
Executing the sqlcmd Utility 93
Using Scripting Variables with sqlcmd 95
The dta Command-Line Utility 96
The tablediff Command-Line Utility 99
The bcp Command-Line Utility 102
The sqldiag Command-Line Utility 103
The sqlservr Command-Line Utility 105
The sqlLocalDB Command-Line Utility 106
Summary 108
5 SQL Server Profiler 111
What’s New with SQL Server Profiler 111
SQL Server Profiler Architecture 112
Creating Traces 113
Events 115
Data Columns 117
Filters 120
Executing Traces and Working with Trace Output 122
Saving and Exporting Traces 123
Saving Trace Output to a File 123
Saving Trace Output to a Table 124
Saving the Profiler GUI Output 124
Importing Trace Files 125
Importing a Trace File into a Trace Table 125
Analyzing Trace Output with the Database Engine Tuning Advisor 128
Replaying Trace Data 128
Defining Server-Side Traces 131
Monitoring Running Traces 141
Stopping Server-Side Traces 143
Profiler Usage Scenarios 145
Analyzing Slow Stored Procedures or Queries 145
Deadlocks 146
Identifying Ad Hoc Queries 148
Identifying Performance Bottlenecks 148
Monitoring Auto-Update Statistics 150
Monitoring Application Progress 151
Summary 153
6 SQL Distributed Replay 155
What’s New for Distributed Replay 155
Overview of Distributed Replay 155
Distributed Replay Components 156
Distributed Replay Administrative Tool 157
Distributed Replay Controller 157
Distributed Replay Clients 158
Target Server 158
Configuring Distributed Replay 158
Controller Configuration File 159
Client Configuration File 159
Preprocess Configuration File 160
Replay Configuration File 161
Replay the Trace Data 163
Configure Permissions and Security 163
Capture the Workload 165
Preprocess the Trace File 166
Apply the Workload 167
Summary 169
Part III SQL Server Administration
7 SQL Server System and Database Administration 173
What’s New in SQL Server System and Database Administration 173
System Administrator Responsibilities 174
System Databases 174
The master Database 175
The resource Database 176
The model Database 176
The msdb Database 176
The distribution Database 176
The tempdb Database 177
Maintaining System Databases 177
System Tables 178
System Views 179
Compatibility Views 180
Catalog Views 182
Information Schema Views 184
Dynamic Management Views 186
System Stored Procedures 189
Useful System Stored Procedures 189
Summary 191
8 Installing SQL Server 2014 193
What’s New in Installing SQL Server 2014 193
Installation Requirements 193
Hardware Requirements 194
Software Requirements 195
Installation Walkthrough 198
Install Screens, Step-by-Step 198
Installing SQL Server Documentation 217
Installing SQL Server Using a Configuration File 219
Running an Automated or Manual Install 224
Installing SQL Server Using Sysprep 226
Preparing a SQL Server Sysprep Image 226
Completing a SQL Server Sysprep Image 229
Modifying a SQL Server Sysprep Image 231
Common Uses of SQL Server Sysprep Images 232
Installing Service Packs and Cumulative Updates 233
Applying a Service Pack or Cumulative Update During a New Installation 233
Summary 236
9 Upgrading to SQL Server 2014 237
What’s New in Upgrading SQL Server 237
The SQL Server 2014 Upgrade Matrix 237
Identifying Products and Features to be Upgraded 240
Using the SQL Server Upgrade Advisor (UA) 241
Getting Started with the UA 241
The Analysis Wizard 243
The Report Viewer 249
Destination: SQL Server 2014 250
Side-by-Side Upgrades 251
Upgrading In-Place 259
Upgrading the Database Engine 260
Installing Product Updates (Slipstreaming) During Upgrades 263
Upgrading Using a Configuration File 264
Upgrading from Pre-SQL Server 2005 Versions 266
Upgrading Other SQL Server Components 266
Upgrading Analysis Services 266
Upgrading SQL Server Analysis Services 266
Upgrading Reporting Services 266
Upgrading SSIS Packages 269
Migrating DTS Packages 271
Summary 271
10 Client Installation and Configuration 273
What’s New in Client Installation and Configuration 273
Client/Server Networking Considerations 274
Server Network Protocols 275
The Server Endpoint Layer 277
The Role of SQL Browser 280
Client Installation 281
Installing the Client Tools 281
Installing SNAC 282
Client Configuration 284
Client Configuration Using SSCM 284
Connection Encryption 287
Client Data Access Technologies 289
Provider Choices 290
Connecting Using the Various Providers and Drivers 291
General Networking Considerations and Troubleshooting 296
Summary 299
11 Database Backup and Restore 301
What’s New in Database Backup and Restore 301
Developing a Backup and Restore Plan 302
Types of Backups 303
Full Database Backups 304
Differential Database Backups 304
Partial Backups 305
Differential Partial Backups 305
File and Filegroup Backups 305
Copy-Only Backups 306
Transaction Log Backups 306
Recovery Models 306
Full Recovery 307
Bulk-Logged Recovery 308
Simple Recovery 309
Backup Devices 310
Disk Devices 310
Tape Devices 310
Network Shares 311
Media Sets and Families 311
Creating Backup Devices 311
Backing Up a Database 312
Creating Database Backups with SSMS 312
Creating Database Backups with T-SQL 315
Backing Up the Transaction Log 318
Creating Transaction Log Backups with SSMS 318
Creating Transaction Log Backups with T-SQL 319
Backup Scenarios 320
Full Database Backups Only 320
Full Database Backups with Transaction Log Backups 321
Differential Backups 322
Partial Backups 323
File/Filegroup Backups 325
Mirrored Backups 326
Copy-Only Backups 326
Compressed Backups 327
Encrypted Backups 328
System Database Backups 329
Restoring Databases and Transaction Logs 330
Restores with T-SQL 330
Restoring by Using SSMS 334
Restore Information 339
Restore Scenarios 342
Restoring to a Different Database 342
Restoring a Snapshot 344
Restoring a Transaction Log 344
Restoring to the Point of Failure 345
Restoring to a Point in Time 347
Online Restores 349
Restoring the System Databases 349
Additional Backup Considerations 351
Frequency of Backups 352
Using a Standby Server 352
Snapshot Backups 353
Considerations for Very Large Databases 354
Maintenance Plans 354
Summary 355
12 Database Mail 357
What’s New in Database Mail 357
Setting Up Database Mail 358
Creating Mail Profiles and Accounts 359
Using T-SQL to Update and Delete Mail Objects 362
Setting System-Wide Mail Settings 363
Testing Your Setup 364
Sending and Receiving with Database Mail 364
The Service Broker Architecture 364
Sending Email 365
Receiving Email 371
Using SQL Server Agent Mail 371
Job Mail Notifications 371
Creating an Operator 371
Enabling SQL Agent Mail 371
Creating the Job 372
Testing the Job-Completion Notification 373
Alert Mail Notifications 373
Creating an Alert 373
Testing the Alert Notification 374
Related Views and Procedures 375
Viewing the Mail Configuration Objects 375
Viewing Mail Message Data 376
Summary 377
13 SQL Server Agent 379
What’s New in Scheduling and Notification 380
Configuring the SQL Server Agent 380
Configuring SQL Server Agent Properties 380
Configuring the SQL Server Agent Startup Account 382
Configuring Email Notification 384
SQL Server Agent Proxy Account 385
Viewing the SQL Server Agent Error Log 387
SQL Server Agent Security 388
Managing Operators 389
Managing Jobs 391
Defining Job Properties 391
Defining Job Steps 392
Defining Multiple Job Steps 394
Defining Job Schedules 395
Defining Job Notifications 397
Viewing Job History 398
Managing Alerts 399
Defining Alert Properties 399
Defining Alert Responses 402
Scripting Jobs and Alerts 404
Multiserver Job Management 405
Creating a Master Server 406
Enlisting Target Servers 407
Creating Multiserver Jobs 407
Event Forwarding 407
Summary 408
14 SQL Server Policy-Based Management 409
What’s New in Policy-Based Management 409
Introduction to Policy-Based Management 410
Policy-Based Management Concepts 411
Facets 411
Conditions 414
Policies 415
Categories 415
Targets 415
Execution Modes 415
Central Management Servers 416
Implementing Policy-Based Management 418
Creating a Condition Based on a Facet 418
Creating a Policy 420
Creating a Category 422
Evaluating Policies 424
Importing and Exporting Policies 425
Sample Templates and Real-World Examples 426
Sample Policy Templates 426
Evaluating Recovery Models 427
Ensuring Object Naming Conventions 427
Checking Best Practices Compliance 427
Policy-Based Management Best Practices 427
Summary 428
15 Security and User Administration 429
What’s New in Security and User Administration 429
An Overview of SQL Server Security 430
Authentication Methods 433
Windows Authentication Mode 433
Mixed Authentication Mode 433
Setting the Authentication Mode 433
Managing Principals 434
Logins 434
SQL Server Security: Users 437
The dbo User 438
The guest User 439
The INFORMATION_SCHEMA User 439
The sys User 439
User/Schema Separation 440
Roles 441
Fixed Server Roles 442
Fixed Database Roles 443
The public Role 445
User-Defined Database Roles 446
User-Defined Server Roles 448
Application Roles 448
Managing Securables 449
Managing Permissions 450
Managing SQL Server Logins 452
Using SSMS to Manage Logins 452
Using T-SQL to Manage Logins 456
Managing SQL Server Users 457
Using SSMS to Manage Users 458
Using T-SQL to Manage Users 460
Managing Database Roles 461
Using SSMS to Manage Database Roles 461
Using T-SQL to Manage Database Roles 462
Managing Server Roles 462
Using SSMS to Manage Server Roles 463
Using T-SQL to Manage Server Roles 463
Managing SQL Server Permissions 464
Using SSMS to Manage Permissions 464
Using SSMS to Manage Permissions at the Server Level 465
Using SSMS to Manage Permissions at the Database Level 467
Using SSMS to Manage Permissions at the Object Level 470
Using T-SQL to Manage Permissions 472
The Execution Context 473
Explicit Context Switching 473
Implicit Context Switching 474
Summary 475
16 Data Encryption 477
What’s New in Data Encryption 478
An Overview of Data Encryption 478
SQL Server Key Management 480
Extensible Key Management 482
Column-Level Encryption 483
Encrypting Columns Using a Passphrase 484
Encrypting Columns Using a Certificate 486
Transparent Data Encryption 490
Implementing Transparent Data Encryption 491
Managing TDE in SSMS 493
Backing Up TDE Certificates and Keys 495
The Limitations of TDE 496
Column-Level Encryption Versus Transparent Data Encryption 496
Summary 498
17 Managing Linked Servers 499
What’s New in Managing Linked Servers 500
Linked Servers 500
Distributed Queries 501
Distributed Transactions 502
Adding, Dropping, and Configuring Linked Servers 503
sp_addlinkedserver 503
sp_linkedservers 510
sp_dropserver 512
sp_serveroption 512
Mapping Local Logins to Logins on Linked Servers 513
sp_addlinkedsrvlogin 514
sp_droplinkedsrvlogin 515
sp_helplinkedsrvlogin 516
Obtaining General Information About Linked Servers 517
Executing a Stored Procedure via a Linked Server 518
Setting Up Linked Servers Using SQL Server Management Studio 519
Summary 523
18 SQL Server Configuration Options 525
What’s New in Configuring, Tuning, and Optimizing SQL Server Options 525
SQL Server Instance Architecture 526
Configuration Options 527
Fixing an Incorrect Option Setting 535
Setting Configuration Options with SSMS 535
Obsolete Configuration Options 535
Configuration Options and Performance 536
access check cache bucket count 536
access check cache quota 536
ad hoc distributed queries 537
affinity I/O mask 537
affinity mask 539
Agent XP 540
backup checksum default 541
backup compression default 541
blocked process threshold 542
c2 audit mode 542
clr enabled 543
common criteria compliance enabled 543
contained database authentication 543
cost threshold for parallelism 544
cross db ownership chaining 545
cursor threshold 545
Database Mail XPs 546
default full-text language 546
default language 548
default trace enabled 550
disallow results from triggers 551
EKM provider enabled 551
filestream_access_level 551
fill factor 552
index create memory 552
in-doubt xact resolution 553
lightweight pooling 553
locks 554
max degree of parallelism 554
max server memory and min server memory 554
max text repl size 556
max worker threads 557
media retention 558
min memory per query 558
nested triggers 559
network packet size 559
Ole Automation Procedures 560
optimize for ad hoc workloads 560
PH_timeout 561
priority boost 561
query governor cost limit 562
query wait 562
recovery interval 563
remote access 564
remote admin connections 564
remote login timeout 564
remote proc trans 565
remote query timeout 565
scan for startup procs 565
show advanced options 566
user connections 566
user options 567
XP-Related Configuration Options 568
Summary 569
19 Working with and Deploying to Azure SQL Database 571
Setting Up Subscriptions, Servers, and Databases 571
Setting Up Your Windows Azure Subscription 572
Creating a Logical Database Server 574
Managing Your Server 576
Configuring Your Firewall 577
Using SQL Server Management Studio 578
Using Management Portal 579
Working with Databases 580
Understanding SQL Database Service Tiers 580
Managing Databases Using T-SQL 584
Migrating Data into SQL Database 586
Copying Databases 587
Exporting Databases 588
Backing Up and Restoring Databases 590
Using SQL Database Backup, Replication, and Recovery 590
Using Database Copies for Backup and Restore 592
Using BACPAC Files for Backup and Restore 593
Managing Logins, Users, and Roles 595
Understanding Roles 595
Managing Logins and Users 596
Considerations for SQL Database Client Applications 598
Connectivity Limitations 598
Connection String Differences 599
Understanding SQL Database Billing 599
Baseline Billing 599
Tracking Your Usage 601
Understanding SQL Database Limitations 603
Unsupported and Partially Supported Functionality 603
References 606
Summary 606
Part IV Database Administration
20 Creating and Managing Databases 609
What’s New in Creating and Managing Databases 610
Data Storage in SQL Server 610
Database Files 611
Primary Files 612
Secondary Files 612
Using Filegroups 613
Using Partitions 616
Transaction Log Files 616
Creating Databases 617
Using SSMS to Create a Database 618
Using T-SQL to Create Databases 621
Setting Database Options 622
The Database Options 623
Using T-SQL to Set Database Options 625
Retrieving Option Information 626
Managing Databases 629
Managing File Growth 629
Expanding Databases 630
Shrinking Databases 631
Moving Databases 636
Restoring a Database to a New Location 636
Using ALTER DATABASE 636
Detaching and Attaching Databases 637
Contained Databases 639
Creating a Contained Database 640
Connecting to a Contained Database 642
Summary 643
21 Creating and Managing Tables 645
What’s New in SQL Server 2014 645
Creating Tables 646
Using Object Explorer to Create Tables 646
Using Database Diagrams to Create Tables 647
Using T-SQL to Create Tables 648
Defining Columns 650
Data Types 651
Column Properties 657
Column Sets 663
Working with Sparse Columns 664
Sparse Columns: Good or Bad? 667
Defining Sparse Columns in SSMS 667
Defining Table Location 668
Defining Table Constraints 670
Modifying Tables 672
Using T-SQL to Modify Tables 672
Using Object Explorer and the Table Designer to Modify Tables 675
Using Database Diagrams to Modify Tables 678
Dropping Tables 680
Using Partitioned Tables 681
Creating a Partition Function 682
Creating a Partition Scheme 684
Creating a Partitioned Table 686
Adding and Dropping Table Partitions 689
Switching Table Partitions 693
Using FILESTREAM Storage 697
Enabling FILESTREAM Storage 698
Setting Up a Database for FILESTREAM Storage 701
Using FILESTREAM Storage for Data Columns 702
Using FileTables 705
FileTable Prerequisites 705
Creating FileTables 707
Copying Files to the FileTable 707
Creating Temporary Tables 709
Summary 710
22 Creating and Managing Indexes 711
What’s New in Creating and Managing Indexes 711
Types of Indexes 712
Clustered Indexes 712
Nonclustered Indexes 714
Creating Indexes 716
Creating Indexes with T-SQL 716
Creating Indexes with SSMS 720
Managing Indexes 722
Managing Indexes with T-SQL 723
Managing Indexes with SSMS 726
Dropping Indexes 727
Online Indexing Operations 727
Indexes on Views 729
Summary 730
23 Implementing Data Integrity 731
What’s New in Data Integrity 731
Types of Data Integrity 732
Domain Integrity 732
Entity Integrity 732
Referential Integrity 732
Enforcing Data Integrity 732
Implementing Declarative Data Integrity 732
Implementing Procedural Data Integrity 733
Using Constraints 733
The PRIMARY KEY Constraint 733
The UNIQUE Constraint 735
The FOREIGN KEY Referential Integrity Constraint 736
The CHECK Constraint 740
Creating Constraints 742
Managing Constraints 747
Rules 750
Defaults 751
Declarative Defaults 751
Bound Defaults 753
When a Default Is Applied 754
Restrictions on Defaults 755
Summary 756
24 Creating and Managing Views 757
What’s New in Creating and Managing Views 757
Definition of Views 757
Using Views 758
Simplifying Data Manipulation 759
Focusing on Specific Data 760
Abstracting Data 761
Controlling Access to Data 762
Creating Views 764
Creating Views Using T-SQL 765
ENCRYPTION 767
Creating Views Using the View Designer 769
Managing Views 772
Altering Views with T-SQL 772
Dropping Views with T-SQL 773
Managing Views with SSMS 773
Data Modifications and Views 773
Partitioned Views 774
Modifying Data Through a Partitioned View 778
Distributed Partitioned Views 779
Indexed Views 780
Creating Indexed Views 781
Indexed Views and Performance 783
To Expand or Not to Expand 786
Summary 787
25 Creating and Managing Stored Procedures 789
What’s New in Creating and Managing Stored Procedures 789
Advantages of Stored Procedures 789
Creating Stored Procedures 791
Creating Procedures in SSMS 792
Executing Stored Procedures 799
Executing Procedures in SSMS 800
Execution Context and the EXECUTE AS Clause 802
Using the WITH RESULT SETS Clause 804
Deferred Name Resolution 807
Identifying the Objects Referenced Within Stored Procedures 809
Viewing Stored Procedures 811
Modifying Stored Procedures 814
Viewing and Modifying Stored Procedures with SSMS 815
Using Input Parameters 816
Setting Default Values for Parameters 817
Passing Object Names as Parameters 820
Using Wildcards in Parameters 822
Using Table-Valued Parameters 823
Using Output Parameters 825
Returning Procedure Status 826
Debugging Stored Procedures Using SQL Server Management Studio 827
Startup Procedures 830
Natively Compiled Stored Procedures 834
T-SQL Stored Procedure Coding Guidelines 838
Summary 839
26 Creating and Managing User-Defined Functions 841
Why Use User-Defined Functions? 841
Types of User-Defined Functions 844
Scalar Functions 844
Table-Valued Functions 847
Creating and Managing User-Defined Functions 849
Creating User-Defined Functions 849
Viewing and Modifying User-Defined Functions 860
Managing User-Defined Function Permissions 868
Rewriting Stored Procedures as Functions 869
Summary 871
27 Creating and Managing Triggers 873
What’s New in Creating and Managing Triggers 874
Using DML Triggers 874
Creating DML Triggers 875
Using AFTER Triggers 877
Using inserted and deleted Tables 881
INSTEAD OF Triggers 885
Using DDL Triggers 893
Creating DDL Triggers 897
Managing DDL Triggers 901
Using Nested Triggers 903
Using Recursive Triggers 903
Summary 905
28 Transaction Management and the Transaction Log 907
What’s New in Transaction Management 907
What Is a Transaction? 907
How SQL Server Manages Transactions 908
Defining Transactions 909
AutoCommit Transactions 909
Explicit User-Defined Transactions 910
Implicit Transactions 916
Implicit Transactions Versus Explicit Transactions 918
Transactions and T-SQL Batches 919
Transactions and Stored Procedures 921
Transactions and Triggers 926
Triggers and Transaction Nesting 927
Triggers and Multistatement Transactions 930
Using Savepoints in Triggers 931
Transactions and Locking 933
READ_COMMITTED_SNAPSHOT Isolation 934
Coding Effective Transactions 934
Transaction Logging and the Recovery Process 935
The Checkpoint Process 939
Automatic Checkpoints 941
Indirect Checkpoints 942
Manual Checkpoints 944
The Recovery Process 945
Managing the Transaction Log 947
Long-Running Transactions 952
Distributed Transactions 954
Summary 955
29 Database Snapshots 957
What’s New with Database Snapshots 958
What Are Database Snapshots? 958
Limitations and Restrictions of Database Snapshots 962
Copy-on-Write Technology 964
When to Use Database Snapshots 965
Reverting to a Snapshot for Recovery Purposes 965
Safeguarding a Database Prior to Making Mass Changes 966
Providing a Testing (or Quality Assurance) Starting Point (Baseline) 967
Providing a Point-in-Time Reporting Database 967
Providing a Highly Available and Offloaded Reporting Database from a Database Mirror 968
Setup and Breakdown of a Database Snapshot 970
Creating a Database Snapshot 970
Removing a Database Snapshot 974
Reverting to a Database Snapshot for Recovery 975
Reverting a Source Database from a Database Snapshot 975
Database Snapshots Maintenance and Security Considerations 977
Security for Database Snapshots 977
Snapshot Sparse File Size Management 977
Number of Database Snapshots per Source Database 977
Summary 978
30 Database Maintenance 979
What’s New in Database Maintenance 980
The Maintenance Plan Wizard 980
Backing Up Databases 983
Checking Database Integrity 987
Shrinking Databases 988
Maintaining Indexes and Statistics 990
Scheduling a Maintenance Plan 993
Managing Maintenance Plans Without the Wizard 997
Executing a Maintenance Plan 1001
Maintenance Without a Maintenance Plan 1002
Database Maintenance Policies 1003
Summary 1003
Part V SQL Server Performance and Optimization
31 Understanding SQL Server Data Structures 1007
What’s New for Data Structures 1007
Understanding Data Structures 1008
Database Files and Filegroups 1008
Primary Data File 1010
Secondary Data Files 1010
The Log File 1011
File Management 1011
Using Filegroups 1012
FILESTREAM Filegroups 1015
Database Pages 1017
Page Types 1017
Data Pages 1018
Row-Overflow Pages 1024
LOB Data Pages 1025
Index Pages 1028
Space Allocation Structures 1029
Extents 1029
Global and Shared Global Allocation Map Pages 1030
Page Free Space Pages 1031
Index Allocation Map Pages 1031
Differential Changed Map Pages 1032
Bulk Changed Map Pages 1032
Data Compression 1033
Row-Level Compression 1033
Page-Level Compression 1035
The CI Record 1038
Implementing Page Compression 1038
Evaluating Page Compression 1039
Managing Data Compression with SSMS 1042
Understanding Table Structures 1043
Heap Tables 1045
Clustered Tables 1047
Understanding Index Structures 1048
Clustered Indexes 1049
Nonclustered Indexes 1052
Columnstore Indexes 1057
Data Modification and Performance 1062
Inserting Data 1062
Deleting Rows 1065
Updating Rows 1066
Summary 1068
32 Indexes and Performance 1069
What’s New for Indexes and Performance 1069
Index Utilization 1070
Index Selection 1072
Evaluating Index Usefulness 1073
Index Statistics 1076
The Statistics Histogram 1078
How the Statistics Histogram Is Used 1080
Index Densities 1081
Estimating Rows Using Index Statistics 1082
Generating and Maintaining Index and Column Statistics 1085
SQL Server Index Maintenance 1093
Setting the Fill Factor 1103
Reapplying the Fill Factor 1105
Disabling Indexes 1106
Managing Indexes with SSMS 1107
Index Design Guidelines 1108
Clustered Index Indications 1109
Nonclustered Index Indications 1111
Index Covering 1112
Included Columns 1114
Wide Indexes Versus Multiple Indexes 1115
Indexed Views 1116
Indexes on Computed Columns 1117
Filtered Indexes and Statistics 1119
Creating and Using Filtered Indexes 1120
Creating and Using Filtered Statistics 1122
Choosing Indexes: Query versus Update Performance 1124
Identifying Missing Indexes 1125
The Database Engine Tuning Advisor 1125
Missing Index Dynamic Management Objects 1126
Missing Index Feature Versus Database Engine Tuning Advisor 1128
Identifying Unused Indexes 1129
Summary 1131
33 In-Memory Optimization and the Buffer Pool Extension 1133
Overview of In-Memory OLTP 1134
In-Memory OLTP Concepts and Terminology 1136
In-Memory Optimization Requirements 1137
Limitations of In-Memory OLTP 1137
Using In-Memory OLTP 1138
Enabling a Database for In-Memory OLTP 1138
Creating Memory-Optimized Tables 1140
Memory-Optimized Tables Row Structure 1142
Indexes on Memory-Optimized Tables 1143
Garbage Collection 1151
Maintaining Statistics on Memory-Optimized Tables 1153
Memory-Optimized Index Design Guidelines 1154
Using Memory-Optimized Tables 1156
Interpreted T-SQL Support for In-Memory OLTP 1156
Native Compilation 1157
Natively Compiled Stored Procedures 1159
Memory-Optimized Table Variables 1162
Transactions and Memory-Optimized Tables 1162
Monitoring Transactions on Memory-Optimized Tables 1170
Logging, Checkpoint, and Recovery for In-Memory OLTP 1170
Transaction Logging 1171
Checkpoint 1171
Recovery 1174
Managing Memory for In-Memory OLTP 1175
Monitoring Memory Usage 1176
Managing Memory with the Resource Governor 1177
Backup and Recovery of Memory-Optimized Databases 1178
Migrating to In-Memory OLTP 1179
Using the AMR Tool 1180
Using the Table Memory Optimization Advisor to Migrate Disk-Based Tables 1181
Dynamic Management Views for In-Memory OLTP 1183
The Buffer Pool Extension 1185
Summary 1186
34 Understanding Query Optimization 1187
What’s New in Query Optimization 1188
What Is the Query Optimizer? 1188
Query Compilation and Optimization 1189
Compiling DML Statements 1189
Optimization Steps 1190
Query Analysis 1191
Identifying Search Arguments 1191
Identifying OR Clauses 1191
Identifying Join Clauses 1192
Row Estimation and Index Selection 1193
Evaluating SARG and Join Selectivity 1193
Estimating Access Path Cost 1199
Using Multiple Indexes 1206
Optimizing with Indexed Views 1213
Optimizing with Filtered Indexes 1216
Evaluating Cardinality Estimates 1218
Join Selection 1219
Join Processing Strategies 1219
Determining the Optimal Join Order 1224
Subquery Processing 1226
Execution Plan Selection 1228
Query Plan Caching 1231
Query Plan Reuse 1231
Query Plan Aging 1234
Recompiling Query Plans 1234
Monitoring the Plan Cache 1235
Other Query Processing Strategies 1243
Predicate Transitivity 1244
GROUP BY Optimization 1244
Queries with DISTINCT 1245
Queries with UNION 1245