Pregunta

Usando SQL Server Management Studio.

¿Cómo puedo probar el rendimiento de una selección grande (por ejemplo, 600.000 filas) sin que la ventana de resultados afecte mi prueba?En igualdad de condiciones, realmente no importa, ya que las dos consultas se enviarán al mismo lugar.Pero me gustaría acelerar mis ciclos de prueba y creo que la configuración de salida de SQL Server Management Studio se interpone en mi camino.La salida a texto es lo que estoy usando actualmente, pero espero una alternativa mejor.

Creo que esto está afectando mis números porque la base de datos está en mi casilla local.

Editar:Tenía una pregunta sobre cómo hacer WHERE 1=0 aquí (pensando que se produciría la unión pero no se produciría ningún resultado), pero lo probé y no funcionó; no es un indicador válido del rendimiento de la consulta.

¿Fue útil?

Solución

Usted podría hacer SET ROWCOUNT 1 antes de la consulta. No estoy seguro de que es exactamente lo que quiere pero va a evitar tener que esperar a que una gran cantidad de datos a ser devuelto, por lo que le dará un cálculo preciso costes.

Sin embargo, si agrega estadísticas de clientes a su consulta , uno de los números es esperar el tiempo en las respuestas del servidor que le dará el tiempo de cálculo del servidor sin incluir el tiempo que se tarda en transferir los datos a través de la red.

Otros consejos

Puede SET STATISTICS TIME ON para obtener una medida de el momento en el servidor. Y se puede utilizar la consulta / incluye cliente Estadística (Shift + Alt + S) en SSMS para obtener información detallada sobre el uso del tiempo del cliente. Tenga en cuenta que SQL consultas no se ejecutan y luego devolver el resultado al cliente cuando haya terminado, pero en cambio, ejecute como que proporcione resultados e incluso suspender la ejecución si el canal de comunicación está llena.

El único contexto en el que una consulta ignora por completo el envío de los paquetes de resultados de vuelta al cliente es la activación. Pero entonces el tiempo para devolver la salida al cliente debe también considerarse cuando se mide el rendimiento. ¿Está seguro de su propio cliente será más rápido que SSMS?

SET ROWCOUNT 1 se detendrá el procesamiento después de la primera fila se devuelve lo que significa menos que el plan pasa a tener un operador de bloqueo, los resultados serán inútiles.

Tomando un ejemplo trivial

SELECT * FROM TableX

El costo de esta consulta en la práctica dependerá en gran medida el número de filas en TableX.

El uso de SET ROWCOUNT 1 no mostrará nada de eso. Independientemente de si TableX tiene 1 fila o filas 1 mil millones que dejará de ejecutar después de que se volvió la primera fila.

A menudo me asigno los resultados SELECT a las variables a ser capaz de ver las cosas como lecturas lógicas sin ser frenado por SSMS mostrar los resultados.

  SET STATISTICS IO ON
  DECLARE @name nvarchar(35),
          @type nchar(3)

  SELECT @name = name, 
         @type = type
  FROM master..spt_values

Hay una solicitud relacionada Conectar artículo Proporcionar "Descartar resultados en el servidor" opción en SSMS y / o TSQL

¿Cómo se puede probar el rendimiento de la consulta si no lo hace la producción de los resultados? La aceleración de la prueba no tiene sentido si la prueba no le dice nada acerca de cómo la consulta se va a realizar. Es lo que realmente quiere averiguar este perro de una consulta tarda diez minutos para devolver los datos después de que lo empuje para empujar?

Y por supuesto que va a tomar algún tiempo para volver 600.000 registros. Lo hará en su interfaz de usuario, así, es probable que tome más tiempo que en su ventana de consulta debido a que la información tiene que pasar a través de la red.

Lo mejor que puede hacer es comprobar el plan de ejecución de la consulta (presione Ctrl + L ) para la consulta real. Eso le dará el mejor cálculo aproximado para un rendimiento disponible.

Yo pensaría que la cláusula donde de WHERE 1=0 Definitivamente está sucediendo en el lado de SQL Server, y no en Management Studio.No se devolverán resultados.

¿Está su motor de base de datos en la misma máquina en la que está ejecutando Mgmt Studio?

Tú podrías :

  • Salida a texto o
  • Salida a archivo.
  • Cierre el panel Resultados de la consulta.

Eso simplemente movería los ciclos dedicados a dibujar la cuadrícula en Mgmt Studio.Quizás los resultados del texto serían más eficaces en general.Ocultar el panel ahorraría los ciclos en Mgmt Studio al tener que extraer los datos.Todavía se está devolviendo a Mgmt Studio, por lo que realmente no ahorra muchos ciclos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top