Descarga de cargas de trabajo de solo lectura a la réplica secundaria de un grupo de disponibilidad Always OnOffload read-only workload to secondary replica of an Always On availability group

SE APLICA A: síSQL Server noAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Las funcionalidades secundarias activas de Grupos de disponibilidad AlwaysOnAlways On availability groups incluyen compatibilidad con el acceso de solo lectura a una o varias réplicas secundarias (réplicas secundarias legibles).The Grupos de disponibilidad AlwaysOnAlways On availability groups active secondary capabilities include support for read-only access to one or more secondary replicas (readable secondary replicas). Una réplica secundaria legible puede estar en modo de disponibilidad de confirmación sincrónica o en el modo de disponibilidad de confirmación asincrónica.A readable secondary replica can be in either synchronous-commit availability mode, or asynchronous-commit availability mode. Una réplica secundaria legible permite el acceso de solo lectura a todas las bases de datos secundarias.A readable secondary replica allows read-only access to all its secondary databases. Sin embargo, las bases de datos secundarias legibles no se establecen como de solo lectura.However, readable secondary databases are not set to read-only. Son dinámicas.They are dynamic. Una base de datos secundaria dada cambia a medida que se aplican los cambios en la base de datos principal correspondiente.A given secondary database changes as changes on the corresponding primary database are applied to the secondary database. En lo que respecta a las réplicas secundarias típicas, los datos, lo cual incluye las tablas con optimización para memoria durables, las bases de datos secundarias están en tiempo prácticamente real.For a typical secondary replica, the data, including durable memory optimized tables, in the secondary databases is in near real time. Además, los índices de texto completo se sincronizan con las bases de datos secundarias.Furthermore, full-text indexes are synchronized with the secondary databases. En muchas circunstancias, la latencia de datos entre una base de datos principal y la base de datos secundaria correspondiente suele ser de solo unos pocos segundos.In many circumstances, data latency between a primary database and the corresponding secondary database is only a few seconds.

La configuración de seguridad de las bases de datos principales se mantiene en las secundarias.Security settings that occur in the primary databases are persisted to the secondary databases. Esto incluye usuarios, roles de base de datos y roles de aplicación, junto con sus permisos correspondientes, y también incluye cifrado de datos transparentes (TDE) si está habilitado en la base de datos principal.This includes users, database roles, and applications roles together with their respective permissions and transparent data encryption (TDE), if enabled on the primary database.

Nota

Aunque no puede escribir datos en las bases de datos secundarias, puede escribir en bases de datos de lectura y escritura de la instancia del servidor que hospeda la réplica secundaria, incluidas las bases de datos de usuario y las bases de datos del sistema, como tempdb.Though you cannot write data to secondary databases, you can write to read-write databases on the server instance that hosts the secondary replica, including user databases and system databases such as tempdb.

Grupos de disponibilidad AlwaysOnAlways On availability groups también admite el reenrutamiento de las solicitudes de conexión con intención de lectura a una réplica secundaria legible (enrutamiento de solo lectura).also supports the re-routing of read-intent connection requests to a readable secondary replica (read-only routing). Para obtener información sobre el enrutamiento de solo lectura, vea Usar un agente de escucha para conectarse a una réplica secundaria de solo lectura (enrutamiento de solo lectura).For information about read-only routing, see Using a Listener to Connect to a Read-Only Secondary Replica (Read-Only Routing).

VentajasBenefits

La dirección de conexiones de solo lectura a las réplicas secundarias legibles proporciona las siguientes ventajas:Directing read-only connections to readable secondary replicas provides the following benefits:

  • Alivia las cargas de trabajo de solo lectura secundarias de la réplica primaria, que conserva los recursos para las cargas de trabajo esenciales de la misión.Offloads your secondary read-only workloads from your primary replica, which conserves its resources for your mission critical workloads. Si tiene una carga de trabajo de lectura de gran importancia o si la carga de trabajo no puede tolerar la latencia, debe ejecutarla en el servidor principal.If you have mission critical read-workload or the workload that cannot tolerate latency, you should run it on the primary.

  • Mejora la rentabilidad de la inversión para los sistemas que hospedan las réplicas secundarias legibles.Improves your return on investment for the systems that host readable secondary replicas.

Además, las réplicas secundarias legibles proporcionan compatibilidad robusta con las operaciones de solo lectura, de la forma siguiente:In addition, readable secondaries provide robust support for read-only operations, as follows:

  • Las estadísticas temporales automáticas en las bases de datos secundarias legibles optimizan las consultas de solo lectura en tablas basadas en disco.Automatic temporary statistics on readable secondary database optimize read-only queries on disk-based tables. Para las tablas con optimización para memoria, se crean automáticamente las estadísticas que faltan.For memory-optimized tables, the missing statistics are created automatically. Sin embargo, no hay actualizaciones automáticas de estadísticas en desuso.However, there is no auto-update of stale statistics. Deberá actualizar manualmente las estadísticas en la réplica primaria.You will need to manually update the statistics on the primary replica. Para obtener más información, vea Estadísticas de las bases de datos de acceso de solo lectura, más adelante en este tema.For more information, see Statistics for Read-Only Access Databases, later in this topic.

  • Las cargas de trabajo de solo lectura para tablas basadas en disco usan las versiones de fila para quitar la contención de bloqueo en las bases de datos secundarias.Read-only workloads for disk-based tables use row versioning to remove blocking contention on the secondary databases. Todas las consultas que se ejecutan en las bases de datos secundarias se asignan automáticamente al nivel de transacción de aislamiento de instantánea, incluso cuando se establecen otros niveles de aislamiento de transacción de forma explícita.All queries that run against the secondary databases are automatically mapped to snapshot isolation transaction level, even when other transaction isolation levels are explicitly set. Asimismo, se pasan por alto todas las sugerencias de bloqueo.Also, all locking hints are ignored. Esto elimina la contención de lectura y escritura.This eliminates reader/writer contention.

  • Las cargas de trabajo de solo lectura para tablas duraderas con optimización para memoria tienen acceso a los datos exactamente de la misma forma que en la base de datos principal, con el uso de procedimientos almacenados nativos o interoperabilidad de SQL con las mismas limitaciones del nivel de aislamiento de transacción (vea Niveles de aislamiento del motor de base de datos).Read-only workloads for memory-optimized durable tables access the data in exactly the same way it is accessed on the primary database, using native stored procedures or SQL Interoperability with the same transaction isolation level limitations (See Isolation Levels in the Database Engine). La carga de trabajo de informes o las consultas de solo lectura que se ejecutan en la réplica principal se pueden ejecutar en la réplica secundaria sin necesidad de hacer ningún cambio.Reporting workload or read-only queries running on the primary replica can be run on the secondary replica without requiring any changes. De forma similar, las cargas de trabajo de informes o las consultas de solo lectura que se ejecutan en una réplica secundaria se pueden ejecutar en la réplica principal sin necesidad de hacer ningún cambio.Similarly, a reporting workload or read-only queries running on a secondary replica can be run on the primary replica without requiring any changes. Al igual que ocurre con las tablas basadas en disco, todas las consultas que se ejecutan en las bases de datos secundarias se asignan automáticamente al nivel de transacción de aislamiento de instantánea, incluso cuando se establecen otros niveles de aislamiento de transacción de forma explícita.Similar to disk-based tables, all queries that run against the secondary databases are automatically mapped to snapshot isolation transaction level, even when other transaction isolation levels are explicitly set.

  • Las operaciones DML se permiten en variables de tabla tanto para los tipos de tabla basadas en disco como para los tipos de tabla con optimización para memoria en la réplica secundaria.DML operations are allowed on table variables both for disk-based and memory-optimized table types on the secondary replica.

Requisitos previos del grupo de disponibilidadPrerequisites for the Availability Group

  • Réplicas secundarias legibles (requeridas)Readable secondary replicas (required)

    El administrador de la base de datos debe configurar una o varias réplicas de modo que, cuando se ejecutan en el rol secundario, permiten todas las conexiones (solo para el acceso de solo lectura) o solo conexiones con intención de lectura.The database administrator needs to configure one or more replicas so that, when running under the secondary role, they allow either all connections (just for read-only access) or only read-intent connections.

    Nota

    Opcionalmente, el administrador de bases de datos puede configurar cualquiera de las réplicas de disponibilidad para excluir las conexiones de solo lectura al ejecutarse en el rol principal.Optionally, the database administrator can configure any of the availability replicas to exclude read-only connections when running under the primary role.

    Para obtener más información, vea Acerca del acceso de conexión de cliente a réplicas de disponibilidad (SQL Server).For more information, see About Client Connection Access to Availability Replicas (SQL Server).

  • Agente de escucha de grupo de disponibilidadAvailability group listener

    Para admitir el enrutamiento de solo lectura, un grupo de disponibilidad debe poseer un agente de escucha de grupo de disponibilidad.To support read-only routing, an availability group must possess an availability group listener. El cliente de solo lectura debe dirigir sus solicitudes de conexión a dicho agente y la cadena de conexión del cliente debe especificar la intención de la aplicación como de "solo lectura".The read-only client must direct its connection requests to this listener, and the client's connection string must specify the application intent as "read-only." Es decir, deben ser solicitudes de conexión de intento de lectura.That is, they must be read-intent connection requests.

  • Enrutamiento de solo lecturaRead only routing

    Elenrutamiento de solo lectura hace referencia a la capacidad de SQL Server para enrutar las solicitudes de conexión con intención de lectura entrantes, que se dirigen a un agente de escucha de grupo de disponibilidad, a una réplica secundaria legible disponible.Read-only routing refers to the ability of SQL Server to route incoming read-intent connection requests, that are directed to an availability group listener, to an available readable secondary replica. Los requisitos previos para el enrutamiento de solo lectura son los siguientes:The prerequisites for read-only routing are as follows:

    • Para admitir el enrutamiento de solo lectura, una réplica secundaria legible requiere una dirección URL de enrutamiento de solo lectura.To support read-only routing, a readable secondary replica requires a read-only routing URL. Esta dirección URL tiene efecto cuando la réplica local se ejecuta en el rol secundario.This URL takes effect only when the local replica is running under the secondary role. La dirección URL de enrutamiento de solo lectura debe especificarse réplica a réplica, según sea necesario.The read-only routing URL must be specified on a replica-by-replica basis, as needed. Cada dirección URL de solo lectura se usa para enrutar las solicitudes de conexión de intento de lectura a una réplica secundaria legible específica.Each read-only routing URL is used for routing read-intent connection requests to a specific readable secondary replica. Normalmente, cada réplica secundaria legible se asigna a una dirección URL de enrutamiento de solo lectura.Typically, every readable secondary replica is assigned a read-only routing URL.

    • Cada réplica de disponibilidad que vaya a admitir el enrutamiento de solo lectura cuando es la réplica principal requiere una lista de enrutamiento de solo lectura.Each availability replica that is to support read-only routing when it is the primary replica requires a read-only routing list. Una lista de enrutamiento de solo lectura dada solo tiene efecto cuando la réplica local se ejecuta en el rol principal.A given read-only routing list takes effect only when the local replica is running under the primary role. Esta lista se debe especificar réplica a réplica, según sea necesario.This list must be specified on a replica-by-replica basis, as needed. Normalmente, cada lista de enrutamiento de solo lectura contendría cada dirección URL de enrutamiento de solo lectura con la dirección URL de la réplica local al final de la lista.Typically, each read-only routing list would contain every read-only routing URL, with the URL of the local replica at the end of the list.

      Nota

      Las solicitudes de conexión con intención de lectura pueden tener equilibrio de carga entre réplicas.Read-intent connection requests can be load-balanced across replicas. Para obtener más información, vea Configuración del equilibrio de carga entre réplicas de solo lectura.For more information, see Configure load-balancing across read-only replicas.

    Para obtener más información, vea Configurar el enrutamiento de solo lectura para un grupo de disponibilidad (SQL Server).For more information, see Configure Read-Only Routing for an Availability Group (SQL Server).

Nota

Para obtener información sobre los agentes de escucha de grupo de disponibilidad y obtener más información sobre el enrutamiento de solo lectura, vea Agentes de escucha de grupo de disponibilidad, conectividad de cliente y conmutación por error de una aplicación (SQL Server).For information about availability group listeners and more information about read-only routing, see Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server).

Limitaciones y restriccionesLimitations and Restrictions

Algunas operaciones no se admiten por completo, como se indica a continuación:Some operations are not fully supported, as follows:

  • Tan pronto como se habilita una réplica legible para lectura, puede comenzar a aceptar conexiones a sus bases de datos secundarias.As soon as a readable replica is enabled for read, it can start accepting connections to its secondary databases. Sin embargo, si hay transacciones activas en una base de datos principal, las versiones de fila no estarán del todo disponibles en la base de datos secundaria correspondiente.However, if any active transactions exist on a primary database, the row versions will not be fully available on the corresponding secondary database. Las transacciones activas que existían en la réplica principal cuando se configuró la réplica secundaria deben confirmarse o revertirse.Any active transactions that existed on the primary replica when the secondary replica was configured must commit or roll back. Hasta que el proceso finalice, la asignación del nivel de aislamiento de transacción en la base de datos secundaria estará incompleta y las consultas se bloquearán temporalmente.Until this process completes, the transaction isolation level mapping on the secondary database is incomplete and queries are temporarily blocked.

    Advertencia

    La ejecución de transacciones largas afecta al número de filas con control de versiones que se conservan, tanto en tablas basadas en disco como en tablas con optimización para memoria.Running long transactions impacts the number of versioned rows kept, both for disk-based and memory-optimized tables.

  • En las bases de datos secundarias con tablas con optimización para memoria, pese a que siempre se generan versiones de filas para las tablas con optimización para memoria, las consultas se bloquean hasta que se completan todas las transacciones activas que había en la réplica principal cuando se habilitó la réplica secundaria para lectura.On a secondary database with memory-optimized tables, even though row versions are always generated for memory-optimized tables, queries are blocked until all active transactions that existed in the primary replica when the secondary replica was enabled for read complete. De esta forma se garantiza que las tablas basadas en disco y las tablas con optimización para memoria estén disponibles para la carga de trabajo de informes y para las consultas de solo lectura al mismo tiempo.This ensures that both disk-based and memory-optimized tables are available to the reporting workload and read-only queries at the same time.

  • El seguimiento de cambios y la captura de datos modificados no se admiten en las bases de datos secundarias que pertenecen a una réplica secundaria legible:Change tracking and change data capture are not supported on secondary databases that belong to a readable secondary replica:

    • El seguimiento de cambios está deshabilitado de forma explícita en las bases de datos secundarias.Change tracking is explicitly disabled on secondary databases.

    • La captura de datos modificados no se puede habilitar solo en una base de datos de réplica secundaria.Change Data Capture cannot be enabled only on a secondary replica database. La captura de datos modificados puede habilitarse en la base de datos de réplica principal y los cambios pueden leerse desde las tablas de CDC mediante las funciones de la base de datos de réplica secundaria.Change Data Capture can be enabled on the primary replica database and the changes can be read from the CDC tables using the functions on the secondary replica database.

  • Dado que las operaciones de lectura se asignan al nivel de transacción de aislamiento de instantánea, la limpieza de registros fantasma en la réplica principal puede bloquearse por las transacciones en una o varias réplicas secundarias.Because read operations are mapped to snapshot isolation transaction level, the cleanup of ghost records on the primary replica can be blocked by transactions on one or more secondary replicas. La tarea de limpieza de registros fantasma limpiará automáticamente los registros fantasma para las tablas basadas en disco en la réplica principal cuando las réplicas secundarias ya no los necesiten.The ghost record cleanup task will automatically clean up the ghost records for disk-based tables on the primary replica when they are no longer needed by any secondary replica. Esto es similar a lo que se realiza cuando se ejecutan transacciones en la réplica principal.This is similar to what is done when you run transaction(s) on the primary replica. En el caso extremo de la base de datos secundaria, deberá eliminar una consulta de lectura de ejecución prolongada que esté bloqueando la limpieza de registros fantasma.In the extreme case on the secondary database, you will need to kill a long running read-query that is blocking the ghost cleanup. Tenga en cuenta que la limpieza de registros fantasma se puede bloquear si la réplica secundaria se desconecta o cuando se suspende el movimiento de datos en la base de datos secundaria.Note, the ghost clean can be blocked if the secondary replica gets disconnected or when data movement is suspended on the secondary database. Este estado también evita el truncamiento del registro, por lo que si el estado persiste, se recomienda quitar esta base de datos secundaria del grupo de disponibilidad.This state also prevents log truncation, so if this state persists, we recommend that you remove this secondary database from the availability group. No existen problemas de limpieza de registros fantasma con las tablas con optimización para memoria porque las versiones de filas se conservan en memoria y son independientes de las versiones de fila de la réplica principal.There is no ghost record cleanup issue with memory-optimized tables because the row versions are kept in memory and are independent of the row versions on the primary replica.

  • Se puede producir un error en la operación DBCC SHRINKFILE en los archivos que contienen tablas basadas en disco en la réplica principal si el archivo contiene registros fantasma que siguen siendo necesarios en una réplica secundaria.The DBCC SHRINKFILE operation on files containing disk-based tables might fail on the primary replica if the file contains ghost records that are still needed on a secondary replica.

  • A partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x), las réplicas secundarias legibles pueden mantenerse en línea incluso si la réplica principal está sin conexión debido a una acción de usuario o un error.Beginning in SQL Server 2014 (12.x)SQL Server 2014 (12.x), readable secondary replicas can remain online even when the primary replica is offline due to user action or a failure. Sin embargo, el enrutamiento de solo lectura no funciona en esta situación porque el agente de escucha del grupo de disponibilidad está desconectado también.However, read-only routing does not work in this situation because the availability group listener is offline as well. Los clientes deben conectarse directamente a las réplicas secundarias de solo lectura para las cargas de trabajo de solo lectura.Clients must connect directly to the read-only secondary replicas for read-only workloads.

Nota

Si consulta la vista de administración dinámica sys.dm_db_index_physical_stats en una instancia del servidor que está hospedando una réplica secundaria legible, puede producirse un problema de bloqueo de REDO.If you query the sys.dm_db_index_physical_stats dynamic management view on a server instance that is hosting a readable secondary replica, you might encounter a REDO blocking issue. Esto se debe a que esta vista de administración dinámica adquiere un bloqueo IS en la tabla de usuario especificada o la vista que puede bloquear las solicitudes de un subproceso de REDO durante un bloqueo X en esa tabla o vista de usuario.This is because this dynamic management view acquires an IS lock on the specified user table or view that can block requests by a REDO thread for an X lock on that user table or view.

Consideraciones de rendimientoPerformance Considerations

En esta sección se describen las consideraciones de rendimiento para las bases de datos secundarias legiblesThis section discusses several performance considerations for readable secondary databases

En esta sección:In This Section:

Latencia de datosData Latency

La implementación del acceso de solo lectura en las réplicas secundarias resulta útil si las cargas de trabajo de solo lectura pueden tolerar cierta latencia de datos.Implementing read-only access to secondary replicas is useful if your read-only workloads can tolerate some data latency. En las situaciones en las que la latencia de datos no es aceptable, considere la posibilidad de ejecutar cargas de trabajo de solo lectura en la réplica principal.In situations where data latency is unacceptable, consider running read-only workloads against the primary replica.

La réplica principal envía las entradas de registro de los cambios en la base de datos principal a las réplicas secundarias.The primary replica sends log records of changes on primary database to the secondary replicas. En cada base de datos secundaria, un subproceso de rehacer dedicado aplica las entradas de registro.On each secondary database, a dedicated redo thread applies the log records. En una base de datos secundaria de acceso de lectura, un cambio determinado de datos no aparece en los resultados de la consulta hasta que la entrada del registro que contiene el cambio se haya aplicado a la base de datos secundaria y la transacción se haya confirmado en la base de datos principal.On a read-access secondary database, a given data change does not appear in query results until the log record that contains the change has been applied to the secondary database and the transaction has been committed on primary database.

Esto significa que hay latencia, normalmente solo se trata de unos segundos, entre las réplicas principales y secundarias.This means that there is some latency, usually only a matter of seconds, between the primary and secondary replicas. No obstante, en casos excepcionales, por ejemplo, si los problemas de red reducen el rendimiento, la latencia puede ser importante.In unusual cases, however, for example if network issues reduce throughput, latency can become significant. La latencia aumenta cuando se producen cuellos de botella de E/S y cuando se suspende el movimiento de los datos.Latency increases when I/O bottlenecks occur and when data movement is suspended. Para supervisar el movimiento de datos suspendido, puede usar el panel AlwaysOn o la vista de administración dinámica sys.dm_hadr_database_replica_states .To monitor suspended data movement, you can use the Always On Dashboard or the sys.dm_hadr_database_replica_states dynamic management view.

Latencia de datos en bases de datos con tablas optimizadas para memoriaData Latency on databases with memory-optimized tables

En SQL Server 2014 (12.x)SQL Server 2014 (12.x) existían consideraciones especiales en torno a la latencia de datos en las secundarias activas: vea SQL Server 2014 (12.x)SQL Server 2014 (12.x) Secundarias activas: réplicas secundarias legibles.In SQL Server 2014 (12.x)SQL Server 2014 (12.x) there were special considerations around data latency on active secondaries - see SQL Server 2014 (12.x)SQL Server 2014 (12.x) Active Secondaries: Readable Secondary Replicas. A partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x) , no existe ninguna consideración especial en torno a la latencia de datos para tablas optimizadas para memoria.Starting SQL Server 2016 (13.x)SQL Server 2016 (13.x) there are no special considerations around data latency for memory-optimized tables. La latencia de datos esperada para tablas con optimización para memoria es comparable a la latencia para tablas basadas en disco.The expected data latency for memory-optimized tables is comparable to the latency for disk-based tables.

Repercusión de la carga de trabajo de solo lecturaRead-Only Workload Impact

Al configurar una réplica secundaria para el acceso de solo lectura, las cargas de trabajo de solo lectura en las bases de datos secundarias utilizan los recursos del sistema, como la CPU y E/S (para tablas basadas en disco) de los subprocesos REDO, especialmente si las cargas de trabajo de solo lectura en tablas basadas en disco realizan un uso intensivo de E/S.When you configure a secondary replica for read-only access, your read-only workloads on the secondary databases consume system resources, such as CPU and I/O (for disk-based tables) from redo threads, especially if the read-only workloads on disk-based tables are highly I/O-intensive. No hay ningún impacto en la E/S cuando se tiene acceso a tablas con optimización para memoria porque todas las filas residen en memoria.There is no IO impact when accessing memory-optimized tables because all the rows reside in memory.

Además, las cargas de trabajo de solo lectura en las réplicas secundarias pueden bloquear los cambios de lenguaje de definición de datos (DDL) que se aplican a través de las entradas de registro.Also, read-only workloads on the secondary replicas can block data definition language (DDL) changes that are applied through log records.

  • Aunque las operaciones de lectura no tienen bloqueos compartidos debido a las versiones de fila, estas operaciones tienen bloqueos de estabilidad de esquema (Sch-S), que pueden bloquear las operaciones de puesta al día que aplican cambios DDL.Even though the read operations do not take shared locks because of row versioning, these operations take schema stability (Sch-S) locks, which can block redo operations that are applying DDL changes. Las operaciones DDL incluyen tablas de instrucciones ALTER/DROP y vistas, pero no incluyen instrucciones DROP o ALTER de procedimientos almacenados.DDL operations include ALTER/DROP tables and Views but not DROP or ALTER of stored procedures. Por ejemplo, cuando se quita una tabla basada en disco o con optimización para memoria en la réplica principal.So for example, if you drop a table disk-based or memory-optimized, on primary. Cuando el subproceso REDO procesa el registro para quitar la tabla, debe adquirir un bloqueo de SCH_M en la tabla y puede bloquearse mediante una consulta en ejecución con acceso a tablas.When REDO thread processes the log record to drop the table, it must acquire a SCH_M lock on the table and can get blocked by a running query accessing table. Este comportamiento es el mismo que en la réplica primaria, salvo que la acción de quitar la tabla forma parte de una sesión de usuario y no de un subproceso REDO.This is the same behavior on primary replica except that the drop of the table is done as part of a user session and not REDO thread.

  • Las tablas con optimización para memoria tienen un bloqueo adicional.There is additional blocking Memory-Optimized Tables. Si se quita un procedimiento almacenado, podría hacer que el proceso REDO provoque bloqueos si existen ejecuciones simultáneas del procedimiento almacenado nativo en la réplica secundaria.A drop of native stored procedure can cause REDO thread to block if there is a concurrent execution of the native stored procedure on the secondary replica. Este comportamiento es el mismo en la réplica primaria, salvo que la acción de quitar el procedimiento almacenado forma parte de una sesión de usuario y no de un subproceso REDO.This is the same behavior on the primary replica except that the drop of the stored procedure is done as part of a user session and not REDO thread.

Debe tener en cuenta los procedimientos recomendados acerca de la creación de consultas y aplicarlos a las bases de datos secundarias.Be aware of best practices around building queries, and exercise those best practices in the secondary databases. Por ejemplo, programe las consultas de ejecución prolongada tales como agregaciones de datos durante las horas de menos actividad.For example, schedule long-running queries such as aggregations of data during times of low activity.

Nota

Cuando las consultas en la réplica secundaria bloquean un subproceso de puesta al día, se genera el evento XEvent sqlserver.lock_redo_blocked .If a redo thread is blocked by queries on a secondary replica, the sqlserver.lock_redo_blocked XEvent is raised.

IndizaciónIndexing

Para optimizar las cargas de trabajo de solo lectura en réplicas secundarias legibles, tal vez desee crear índices en las tablas de las bases de datos secundarias.To optimize read-only workloads on the readable secondary replicas, you may want to create indexes on the tables in the secondary databases. Debido a que no se pueden realizar cambios de esquema o de datos en las bases de datos secundarias, cree los índices en las bases de datos principales y permita que los cambios se transfieran a la base de datos secundaria mediante el proceso de puesta al día.Because you cannot make schema or data changes on the secondary databases, create indexes in the primary databases and allow the changes to transfer to the secondary database through the redo process.

Para supervisar la actividad de uso de índices en una réplica secundaria, consulte las columnas user_seeks, user_scansy user_lookups de la vista de administración dinámica sys.dm_db_index_usage_stats .To monitor index usage activity on a secondary replica, query the user_seeks, user_scans, and user_lookups columns of the sys.dm_db_index_usage_stats dynamic management view.

Estadísticas de las bases de datos de acceso de solo lecturaStatistics for Read-Only Access Databases

Las estadísticas de las columnas de tablas y vistas indizadas se usan para optimizar los planes de consulta.Statistics on columns of tables and indexed views are used to optimize query plans. Para los grupos de disponibilidad, las estadísticas que se crean y se mantienen en las bases de datos principales se conservan automáticamente en las bases de datos secundarias como parte de la aplicación de los registros de transacciones.For availability groups, statistics that are created and maintained on the primary databases are automatically persisted on the secondary databases as part of applying the transaction log records. No obstante, la carga de trabajo de solo lectura en las bases de datos secundarias puede necesitar estadísticas distintas de las que se crean en las bases de datos principales.However, the read-only workload on the secondary databases may need different statistics than those that are created on the primary databases. Sin embargo, debido a que las bases de datos secundarias están restringidas al acceso de solo lectura, las estadísticas no se pueden crear en las bases de datos secundarias.However, because secondary databases are restricted to read-only access, statistics cannot be created on the secondary databases.

Para resolver este problema, la réplica secundaria crea y mantiene las estadísticas temporales para las bases de datos secundarias en tempdb.To address this problem, the secondary replica creates and maintains temporary statistics for secondary databases in tempdb. El sufijo _readonly_database_statistic se anexa al nombre de las estadísticas temporales para diferenciarlas de las estadísticas permanentes que se mantienen de la base de datos principal.The suffix _readonly_database_statistic is appended to the name of temporary statistics to differentiate them from the permanent statistics that are persisted from the primary database.

Solo SQL ServerSQL Server puede crear y actualizar las estadísticas temporales.Only SQL ServerSQL Server can create and update temporary statistics. No obstante, puede eliminar las estadísticas temporales y supervisar sus propiedades mediante las mismas herramientas que se usan para las estadísticas permanentes:However, you can delete temporary statistics and monitor their properties using the same tools that you use for permanent statistics:

  • Elimine las estadísticas temporales mediante la instrucción DROP STATISTICSTransact-SQLTransact-SQL .Delete temporary statistics using the DROP STATISTICSTransact-SQLTransact-SQL statement.

  • Supervise las estadísticas con las vistas de catálogo sys.stats y sys.stats_columns .Monitor statistics using the sys.stats and sys.stats_columns catalog views. sys_stats incluye una columna, is_temporary, para indicar las estadísticas que son permanentes y las que son temporales.sys_stats includes a column, is_temporary, to indicate which statistics are permanent and which are temporary.

No se permite la actualización de estadísticas automáticas para tablas con optimización de memoria en la réplica principal o secundaria.There is no support for auto-statistics update for memory-optimized tables on the primary or secondary replica. Debe supervisar el rendimiento de las consultas y planes en la réplica secundaria y actualizar manualmente las estadísticas de la réplica principal cuando sea necesario.You must monitor query performance and plans on the secondary replica and manually update the statistics on the primary replica when needed. Sin embargo, las estadísticas que faltan se crean automáticamente tanto en la réplica principal como en la secundaria.However, the missing statistics are automatically created both on primary and secondary replica.

Para obtener más información sobre las estadísticas de SQL Server, vea Estadísticas.For more information about SQL Server statistics, see Statistics.

En esta sección:In This Section:

Estadísticas permanentes obsoletas en bases de datos secundariasStale Permanent Statistics on Secondary Databases

SQL ServerSQL Server detecta cuándo están obsoletas las estadísticas permanentes de una base de datos secundaria.detects when permanent statistics on a secondary database are stale. Pero no se pueden realizar cambios en las estadísticas permanentes, excepto a través de los cambios en la base de datos principal.But changes cannot be made to the permanent statistics except through changes on the primary database. Para la optimización de consultas, SQL ServerSQL Server crea estadísticas temporales para tablas basadas en disco en la base de datos secundaria y usa estas estadísticas en lugar de las estadísticas en desuso permanentes.For query optimization, SQL ServerSQL Server creates temporary statistics for disk-based tables on the secondary database and uses these statistics instead of the stale permanent statistics.

Cuando las estadísticas permanentes se actualizan en la base de datos principal, se guardan automáticamente en la base de datos secundaria.When the permanent statistics are updated on the primary database, they are automatically persisted to the secondary database. A continuación SQL ServerSQL Server usa las estadísticas actualizadas permanentes, más actuales que las estadísticas temporales.Then SQL ServerSQL Server uses the updated permanent statistics, which are more current than the temporary statistics.

Si el grupo de disponibilidad conmuta por error, las estadísticas temporales se eliminan en todas las réplicas secundarias.If the availability group fails over, temporary statistics are deleted on all of the secondary replicas.

Limitaciones y restriccionesLimitations and Restrictions

  • Debido a que las estadísticas temporales se almacenan en tempdb, el reinicio del servicio SQL ServerSQL Server provoca que desaparezcan todas las estadísticas temporales.Because temporary statistics are stored in tempdb, a restart of the SQL ServerSQL Server service causes all temporary statistics to disappear.

  • El sufijo _readonly_database_statistic está reservado para las estadísticas que genera SQL ServerSQL Server.The suffix _readonly_database_statistic is reserved for statistics generated by SQL ServerSQL Server. Este sufijo no se puede usar al crear estadísticas en una base de datos principal.You cannot use this suffix when creating statistics on a primary database. Para obtener más información, vea Statistics.For more information, see Statistics.

Obtener acceso a tablas optimizadas para memoria en una réplica secundariaAccessing memory-optimized tables on a Secondary Replica

Los niveles de aislamiento de transacción que se pueden usar con tablas con optimización para memoria en una réplica secundaria son los mismos que en la réplica principal.The transaction isolation levels that can be used with memory-optimized tables on a secondary replica are the same as on the primary replica. Se recomienda establecer el nivel de aislamiento de nivel de sesión en READ COMMITTED y establecer la opción de nivel de base de datos MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT en ON.The recommendation is to set the session-level isolation level to READ COMMITTED and set the database-level option MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT to ON. Por ejemplo:For example:

ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON  
GO  
SET TRANSACTION ISOLATION LEVEL READ COMMITTED  
GO  
SELECT SUM(UnitPrice*OrderQty)   
FROM Sales.SalesOrderDetail_inmem  
GO  
  

Consideraciones de planeamiento de capacidadCapacity Planning Considerations

  • En el caso de las tablas basadas en disco, las réplicas secundarias legibles pueden requerir espacio en tempdb por dos motivos:In the case of disk-based tables, readable secondary replicas can require space in tempdb for two reasons:

    • El nivel de aislamiento de instantánea copia las versiones de fila en tempdb.Snapshot isolation level copies row versions into tempdb.

    • Se crean estadísticas temporales para las bases de datos secundarias y se mantienen en tempdb.Temporary statistics for secondary databases are created and maintained in tempdb. Las estadísticas temporales pueden causar un ligero aumento del tamaño de tempdb.The temporary statistics can cause a slight increase in the size of tempdb. Para obtener más información, vea Estadísticas de las bases de datos de acceso de solo lectura, más adelante en esta sección.For more information, see Statistics for Read-Only Access Databases, later in this section.

  • Al configurar el acceso de lectura en una o varias réplicas secundarias, las bases de datos principales agregan 14 bytes de sobrecarga en las filas de datos eliminadas, modificadas o insertadas para almacenar punteros a versiones de fila en las bases de datos secundarias para tablas basadas en disco.When you configure read-access for one or more secondary replicas, the primary databases add 14 bytes of overhead on deleted, modified, or inserted data rows to store pointers to row versions on the secondary databases for disk-based tables. Esta sobrecarga de 14 bytes se aplica a las bases de datos secundarias.This 14-byte overhead is carried over to the secondary databases. A medida que se agrega la sobrecarga de 14 bytes a las filas de datos, se pueden producir divisiones de página.As the 14-byte overhead is added to data rows, page splits might occur.

    Las bases de datos principales no generan los datos de las versiones de fila.The row version data is not generated by the primary databases. En su lugar, las bases de datos secundarias generan las versiones de fila.Instead, the secondary databases generate the row versions. Sin embargo, el control de versiones de fila aumenta el almacenamiento de datos tanto en las bases de datos principales como en las secundarias.However, row versioning increases data storage in both the primary and secondary databases.

    La adición de los datos de las versiones de fila depende del valor de nivel de aislamiento de instantánea o de aislamiento de instantánea de lectura confirmada (RCSI) en la base de datos principal.The addition of the row version data depends on the snapshot isolation or read-committed snapshot isolation (RCSI) level setting on the primary database. En la tabla siguiente se describe el comportamiento del control de versiones en una base de datos secundaria legible con configuraciones diferentes para las tablas basadas en disco.The table below describes the behavior of versioning on a readable secondary database under different settings for disk based tables.

    ¿Réplica secundaria legible?Readable secondary replica? ¿Nivel de aislamiento de instantánea o de RCSI habilitado?Snapshot isolation or RCSI level enabled? Base de datos principalPrimary Database Base de datos secundariaSecondary Database
    NoNo NoNo Sin versiones de fila ni sobrecarga de 14 bytesNo row versions or 14-byte overhead Sin versiones de fila ni sobrecarga de 14 bytesNo row versions or 14-byte overhead
    NoNo Yes Con versiones de fila y sobrecarga de 14 bytesRow versions and 14-byte overhead Sin versiones de fila pero con sobrecarga de 14 bytesNo row versions, but 14-byte overhead
    Yes NoNo Sin versiones de fila pero con sobrecarga de 14 bytesNo row versions, but 14-byte overhead Con versiones de fila y sobrecarga de 14 bytesRow versions and 14-byte overhead
    Yes Yes Con versiones de fila y sobrecarga de 14 bytesRow versions and 14-byte overhead Con versiones de fila y sobrecarga de 14 bytesRow versions and 14-byte overhead

Tareas relacionadasRelated Tasks

Contenido relacionadoRelated Content

Consulte tambiénSee Also

Información general de los grupos de disponibilidad AlwaysOn (SQL Server) Overview of Always On Availability Groups (SQL Server)
Acerca del acceso de conexión de cliente a réplicas de disponibilidad (SQL Server) About Client Connection Access to Availability Replicas (SQL Server)
Agentes de escucha de grupo de disponibilidad, conectividad de cliente y conmutación por error de una aplicación (SQL Server) Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server)
EstadísticasStatistics