Si disparo una consulta SQL desde una herramienta de BI a través de ODBC a un conjunto de datos en un DWH, ¿los datos se copian necesariamente primero o no hay E / S involucradas?

En términos de copia, la aplicación (herramienta de BI, aplicación web, etc.) no importa, y el enfoque utilizado para el esquema db (almacén de datos, OLTP, etc.) tampoco importa en términos de copia, ya que esto es determinado por la implementación interna del motor de base de datos.

Voy a considerar cualquier movimiento de bytes de una pieza de memoria a otra como una “copia”.

Por lo general, se realizarán varias copias de datos desde el back-end del motor de base de datos a medida que responde la consulta y envía los datos a su aplicación, incluso si sus datos están en el grupo de búferes del motor de base de datos.

Para enviar una respuesta a una consulta SELECT, normalmente se realizan las siguientes “copias de datos” (como mínimo):

  • Un “recorrido” de la agrupación de almacenamiento intermedio, que puede o no implicar la carga de datos del almacén persistente al responder la consulta. Si se trata de un índice, puede haber dos conjuntos de copias aquí: uno para recuperar las páginas de índice y otro para recuperar las páginas de la fila base. Aumente en 1 copia de la página por cada tabla base e índice involucrado en la consulta si hay una unión, y reste 1 por cada “índice de cobertura” que pueda usarse.
  • Si el motor de base de datos utiliza estructuras de datos intermedias para responder a la consulta, como combinaciones de tablas hash o combinaciones de clasificación de combinación (que no usan un índice), puede haber copias involucradas para completar estas estructuras de datos.
  • Algunos motores de bases de datos apuntan directamente a las filas de la agrupación de almacenamientos intermedios, mientras que otros copian datos de la agrupación de almacenamientos intermedios en estructuras intermedias al preparar el conjunto de resultados que se enviará a la aplicación. Si se trata de una clasificación grande, también habrá escrituras en el disco y posiblemente varias copias en el disco mientras se realiza la clasificación si es realmente grande.
  • Copie desde la fila final establecida en el motor de ejecución de la base de datos a un búfer de memoria en el formato de protocolo que se enviará a través de la red.
  • Cualquier copia realizada internamente por el hardware de red y las API de red de bajo nivel.
  • Lea los bytes de la implementación de API del lado del cliente desde el formato del protocolo en estructuras de datos intermedias para que la aplicación pueda leer los datos.
  • La aplicación misma copiará los bytes de las llamadas API (ODBC en este caso) en sus propias estructuras de datos.

Voy a hacer algunas suposiciones sobre tu pregunta. En particular, supongo que le preocupan las copias de E / S del servidor del depósito de datos a través de la conexión ODBC a su cliente de BI.

Por lo general, solo las filas de resultados (y los gastos generales / metadatos) se transmiten a la herramienta de BI. En algunos casos, una herramienta de BI puede tener algún procesamiento posterior a la consulta de los datos que resulta en una copia de los datos por parte del cliente; como mínimo, es probable que se copie de los buffers proporcionados a ODBC en algún espacio de presentación para su visualización, pero allí también puede ser la clasificación, agrupación o reorganización de columnas del lado del cliente, etc.

Del lado del servidor, la complejidad de la consulta, el diseño del motor de base de datos SQL y el diseño del servidor ODBC pueden dar como resultado cualquier cantidad de copias de los datos de la fila.