Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
How Good Is Your Indexing Strategy? TIM FORD MICROSOFT DATA PLATFORM MVP FOUNDER: SQL CRUISE & B-SIDE CONSULTING SENIOR DBA: SURVEYMONKEY WHO IS TIM? MVP Since 2009 SQL Cruise Since 2010 Author Senior DBA PASS Board of Directors CONTACT POINTS thesqlagentman.com SQLCruise.com [email protected] @sqlagentman @sqlcruise GOALS FAMILIARITY WITH INDEX-RELATED SYSTEM OBJECTS UNDERSTAND HOW THE PIECES FIT TOGETHER UNDERSTAND WHAT QUESTIONS CAN BE ANSWERED AGENDA INTRODUCTION: WHY ARE INDEXES IMPORTANT HOW DOES INDEXING GET IN THE WAY? WHAT MAKES FOR A GOOD INDEX? TOUR THE INDEXING DYNAMIC MANAGEMENT OBJECTS MY GIFT TO YOU: THE SCRIPTS AND WHAT THEY ANSWER WHY INDEX? HOW DOES INDEXING GET IN THE WAY? WHAT MAKES FOR A “GOOD” INDEX? INDEXING STRATEGY HIGH READ:WRITE RATIO APPROPRIATENESS REASONABLE FILL FACTOR HEALTHY FRAGMENTATION KEY ANALYSIS POINTS INDEXING DMOs TOOLS AND ANALYSIS USAGE COUNTERS PHYSICAL METRICS LOCK/LATCH/SPLIT STATISTICS MISSING INDEX DMOs DM_DB_MISSING_INDEX_COLUMNS DM_DB_MISSING_INDEX_DETAILS DM_DB_MISSING_INDEX_GROUP_STATS DM_DB_MISSING_INDEX_GROUPS INDEXING DMOs DM_DB_INDEX_USAGE_STATS DM_DB_INDEX_PHYSICAL_STATS DM_DB_INDEX_OPERATIONAL_STATS USAGE STATISTICS SELECT * FROM sys.dm_db_index_usage_stats Returns cumulative scan, seek, lookup, update counts and last action times for these operations for each heap or index in the database for both user actions as well as system operations against these objects CRITICAL COLUMNS COLUMN NAME WHY IT MATTERS DATABASE_ID IDENTIFICATION OBJECT_ID IDENTIFICATION INDEX_ID IDENTIFICATION USER_SEEKS COUNT OF USER-INITIATED SEEKS USER_SCANS COUNT OF USER-INITIATED SCANS USER_LOOKUPS COUNT OF USER-INITIATED LOOKUPS USER_UPDATES COUNT OF USER-INITIATED WRITES LAST_USER_SEEK … UPDATE LAST TIME THIS OPERATION HAPPENED PHYSICAL METRICS SELECT * FROM sys.dm_db_index_physical_stats (database_id , object_id , index_id , partition_id , ‘limited’ | ‘detailed’ | ‘sampled’) Returns fragmentation, structural definitions, space usage, and compression metrics for each partition of a table or index in the database CRITICAL COLUMNS COLUMN NAME WHY IT MATTERS DATABASE_ID IDENTIFICATION OBJECT_ID IDENTIFICATION INDEX_ID IDENTIFICATION PARTITION_ID IDENTIFICATION INDEX_TYPE_DESC ALLOC_UNIT_TYPE_DESC AVG_FRAGMENTATION_IN_PCT PAGE_COUNT RECORD_COUNT AVG_RECORD_SIZE_IN_BYTES HEAP | CLUSTERED | NON-CLUSTERED LOB OR NON-LOB DATA FRAGMENTATION METRIC SIZE HOW MANY RECORDS AVERGAGE SIZE OF EACH RECORD OPERATIONAL STATISTICS SELECT * FROM sys.dm_db_index_operational_stats (database_id , object_id , index_id , partition_id) Returns cumulative I/O, locking, latching, and access method activity as well as page split metrics for each partition of a table or index in the database CRITICAL COLUMNS COLUMN NAME WHY IT MATTERS DATABASE_ID IDENTIFICATION OBJECT_ID IDENTIFICATION INDEX_ID IDENTIFICATION PARTITION_ID IDENTIFICATION LEAF_ALLOCATION_COUNT NONLEAF_ALLOCATION_COUNT LEAF-LEVEL PAGE SPLITS NON-LEAF-LEVEL PAGE SPLITS CRITICAL COLUMNS - continued COLUMN NAME WHY IT MATTERS PAGE_LOCK_WAIT_COUNT NUMBER OF PAGE LOCK WAITS PAGE_LOCK_WAIT_IN_MS PAGE LOCK WAITS IN MILLISECONDS PAGE_LATCH_WAIT_COUNT NUMBER OF PAGE LATCH WAITS PAGE_LATCH_WAIT_IN_MS PAGE LATCH WAITS IN MILLISECONDS PAGE_IO_LATCH_WAIT_COUNT NUMBER OF PAGE IO LATCH WAITS PAGE_IO_LATCH_WAIT_IN_MS PAGE IO LATCH WAITS IN MILLISECONDS SYSTEM VIEWS TOOLS AND ANALYSIS INDEX METADATA INDEX COLUMN METADATA TABLE OBJECT METADATA COLUMN METADATA DATA TYPE METADATA OBJECT NAME SYS.INDEXES SYS.INDEX_COLUMNS SYS.TABLES SYS.COLUMNS SYS.TYPES database_id IXPS IXUS IXOS INDEX METADATA ECOSYSTEM object_id index_id DMOs System Views sys.tables sys.columns sys.indexes sys.index_columns column_id KEY system_type_id & DMV user_type_id column sys.types DMF SYSTEM VIEW QUESTIONS… ANSWERED USAGE Which tables are read from | written to most | least? Which tables have no activity since last restart | rebuild? What are the use patterns for all indexes? PHYSICAL What are my largest indexes? Which indexes are fragmented? Which indexes that are most used for reads most fragmented? PERFORMANCE Which indexes have the most page splits? Which indexes have the most latching | locking time? Which indexes have the highest average latching | locking time per user interaction? Which indexes have the most table lock promotion attempts | successes? Are there any missing indexes that could help reduce latch | lock | IO latch waits? INFORMATIONAL What indexes are on (this) table? CONTACT POINTS thesqlagentman.com SQLCruise.com [email protected] @sqlagentman @sqlcruise