tipos tablas subconsultas ejemplos consultas complejas catalogo anidadas sql-server sql-server-2012 database-performance sqlperformance

sql-server - subconsultas - tablas catalogo sql server



En SQL Server, ¿cuál es la diferencia entre una consulta de usuario y una consulta de sistema? (2)

La documentación para sys.dm_db_missing_index_group_stats utiliza los términos "consultas de los usuarios" y "consultas del sistema", pero no define lo que significan. Por ejemplo:

  • user_seeks: "Número de búsquedas causadas por consultas de usuarios para las que se podría haber utilizado el índice recomendado en el grupo".
  • system_seeks: "Número de búsquedas causadas por consultas del sistema , como consultas de estadísticas automáticas, en las que se podría haber utilizado el índice recomendado en el grupo".

Según la forma en que se usa el término en la consulta del Sistema para determinar la vista completa (incluida la heredada de los ROLES DE AD) de una base de datos? , Supongo que las consultas del sistema son consultas en las tablas del sistema . Entonces las consultas del usuario deben ser consultas en contra de las tablas de usuario .

¿Alguien tiene una fuente más autorizada para la definición de estos dos términos? Pregunto porque estoy usando los resultados de sys.dm_db_missing_index_group_stats y considerando cómo ponderar adecuadamente avg_user_impact vs. avg_system_impact al decidir si aplicar un índice.


De la respuesta a la pregunta ¿Qué causa system_scans en sys.dm_db_index_usage_stats para contar?

Entiendo que las columnas de escaneos / búsquedas del sistema tienen que ver con actualizaciones de estadísticas y mantenimiento de índices. Le pregunté a Brent Ozar cuando estaba presentando en Alemania hace aproximadamente un mes y él me confirmó esto.

Le pregunté sobre esto con respecto a la identificación de índices no utilizados en un sistema. Dijo que solo tenía que preocuparse por las búsquedas de usuarios y los escaneos de usuarios, los del sistema son realmente solo operaciones del lado del sistema. Por lo tanto, las consultas no han utilizado un índice que solo tiene actividad de "sistema" desde que se restablecieron por última vez las estadísticas de uso del índice.

Confirmé esto parcialmente al ejecutar algunas consultas en AdventureWorks2012 :

/* Get the statistics from Sales.SalesOrderHeader */ EXEC sp_helpstats ''Sales.SalesOrderHeader'' -- Results: /* statistics_name statistics_keys ------------------------------------------- _WA_Sys_00000004_4B7734FF DueDate _WA_Sys_00000008_4B7734FF SalesOrderNumber _WA_Sys_0000000D_4B7734FF TerritoryID _WA_Sys_0000000E_4B7734FF BillToAddressID _WA_Sys_0000000F_4B7734FF ShipToAddressID _WA_Sys_00000010_4B7734FF ShipMethodID _WA_Sys_00000011_4B7734FF CreditCardID _WA_Sys_00000013_4B7734FF CurrencyRateID */ /* Update the statistics for the SalesOrderNumber stats */ UPDATE STATISTICS Sales.SalesOrderHeader _WA_Sys_00000008_4B7734FF WITH FULLSCAN /* Get the index usage stats for that index */ SELECT DB_NAME(iu.database_id), OBJECT_NAME(iu.object_id), i.name, iu.user_seeks, iu.user_scans, iu.system_seeks, iu.system_scans FROM sys.dm_db_index_usage_stats iu JOIN sys.indexes i ON iu.object_id = i.object_id AND iu.index_id = i.index_id WHERE i.name = ''AK_SalesOrderHeader_SalesOrderNumber'' /* DatabaseName TableName IndexName AdventureWorks2012 SalesOrderHeader AK_SalesOrderHeader_SalesOrderNumber user_seeks user_scans system_seeks system_scans 0 0 0 1 */ /* Seek and scan the index */ SELECT SalesOrderNumber FROM Sales.SalesOrderHeader WHERE SalesOrderNumber = N''A'' UNION ALL SELECT TOP 100 SalesOrderNumber FROM Sales.SalesOrderHeader WITH (INDEX(AK_SalesOrderHeader_SalesOrderNumber)) /* Running the index usage query from above returns the following: DatabaseName TableName IndexName AdventureWorks2012 SalesOrderHeader AK_SalesOrderHeader_SalesOrderNumber user_seeks user_scans system_seeks system_scans 1 1 0 1 */ /* Rebuild the index to remove all usage stats */ ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON Sales.SalesOrderHeader REBUILD

De modo que el usuario busca y escanea la vista de administración de uso pareciendo apropiada, y el escaneo del sistema de actualizar las estadísticas coincide con la respuesta dada anteriormente.

Pero volviendo a la pregunta original, diría que no necesita preocuparse por las búsquedas del sistema y los escaneos del sistema en sys.dm_db_missing_index_group_stats . Parece que significaría que SQL Server estaba intentando buscar algún tipo de metadatos propios y que no tenía los índices internos correctos para satisfacer las consultas.


Mucho antes de SQL 4.21 siempre nos referíamos a las consultas del sistema como procesos almacenados que estaban en la base de datos maestra y las consultas de los usuarios estaban en bases de datos de usuarios (no en el maestro).

El motivo tenía que ver con convenciones de nomenclatura y algoritmos de búsqueda para saber dónde estaba el código "global" en la base de datos maestra. (sp_MyCode vs. spMyCode)

También los procesos almacenados eXtended también se definieron en el máster.

No creo que esto sea lo que la gente quiere decir con los términos.