Use Sysbench para ejecutar pruebas de rendimiento de procesamiento transaccional en línea (OLTP) contra un clúster de PolarDB for MySQL. Esta página abarca la configuración, la instalación y los comandos de prueba para escenarios de solo lectura, lectura/escritura y solo escritura.
Herramienta de prueba
Sysbench es una herramienta de prueba de rendimiento multiplataforma y de código abierto. Se utiliza principalmente para evaluar bases de datos (como MySQL) y medir el rendimiento del sistema, incluidos CPU, memoria, E/S e hilos. Sysbench admite pruebas multihilo y usa scripts de Lua para controlar la lógica de prueba con flexibilidad. Por ello, resulta adecuada para evaluar el rendimiento de bases de datos y ejecutar pruebas de estrés.
Entorno de prueba
Configuración del cliente
|
Categoría |
Especificación |
|
Tipo de instancia |
ECS.c5.4xlarge (16 núcleos de CPU, 32 GB de memoria) |
|
Sistema operativo |
CentOS 7.0 de 64 bits |
|
Número de instancias |
1 por cada nodo de cómputo de 8 núcleos; escale de forma proporcional (por ejemplo, 2 instancias para nodos de 16 núcleos) |
|
Requisito de red |
Misma región, zona y Virtual Private Cloud (VPC) que el clúster de PolarDB |
|
Latencia de PING |
Debe ser inferior a 0.2 ms |
Configuración del clúster de PolarDB
|
Categoría |
Especificación |
|
Tipo de clúster |
Clúster de dos nodos (un nodo principal y un nodo de solo lectura) |
|
Endpoints |
Endpoint principal, endpoint de clúster y endpoints personalizados, combinados según sea necesario para maximizar el uso de recursos |
Configuración de parámetros
Para las pruebas de alta concurrencia, configure los siguientes parámetros antes de ejecutarlas:
max_prepared_stmt_count: aumente este valor para evitar el errorcan't create more than max_prepared_stmt_count statementscuando hay una gran cantidad de hilos.--db-ps-mode=disable: agregue esta marca al comando de prueba en escenarios de gran escala y alta concurrencia, cuandomax_prepared_stmt_countpor sí solo no basta. Esto deshabilita la función Prepared Statement.Clústeres extragrandes (88 núcleos o más): se requiere ajustar parámetros adicionales para aprovechar por completo los recursos del clúster. Ajuste según su tipo de instancia y los resultados reales de las pruebas.
Para conocer los pasos de configuración de parámetros, consulte Set cluster parameters and node parameters.
Notas sobre la prueba
Todos los comandos de esta página requieren permisos de root.
Las pruebas usan
tables=250ytable-size=25000. Incrementethreadsentre ejecuciones. Cada página de producto muestra únicamente los resultados máximos.Esta página toma como ejemplo un clúster de PolarDB for MySQL Cluster Edition.
Escenarios de prueba
Esta prueba mide el rendimiento OLTP en escenarios de solo lectura, solo escritura y lectura/escritura. Utiliza un clúster de dos nodos (un nodo principal y uno de solo lectura) con distintos tipos de instancias Dedicated.
Métricas
|
Métrica |
Descripción |
|
TPS (transacciones por segundo) |
Cantidad de transacciones ejecutadas por segundo, basada en los COMMIT exitosos |
|
QPS (consultas por segundo) |
Cantidad de instrucciones SQL (INSERT, SELECT, UPDATE, DELETE) ejecutadas por segundo |
Instalar Sysbench
-
Clone y compile Sysbench en la instancia de ECS:
git clone https://github.com/akopytov/sysbench.git cd sysbench ./autogen.sh ./configure make -j make install -
Configure el cliente de Sysbench para distribuir el procesamiento de paquetes de red entre todos los núcleos de CPU. Así reducirá los cambios de contexto:
El valor
ffffhabilita los 16 núcleos de CPU para procesar paquetes. Ajústelo según la cantidad de núcleos disponibles:ffpara 8 núcleos,ffffpara 16 núcleos, y así sucesivamente.sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffff>$x/rps_cpus; done' sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt"
Ejecutar las pruebas
Antes de ejecutar las pruebas, compruebe que cuenta con lo siguiente:
Una instancia de ECS en la misma región, zona y VPC que su clúster de PolarDB
Un clúster de PolarDB for MySQL de dos nodos con los endpoints configurados
Sysbench instalado en la instancia de ECS
Paso 1: Obtener el endpoint del clúster
Obtenga el endpoint y el puerto de su clúster de PolarDB for MySQL. Consulte Manage connection addresses.
Paso 2: Configurar el endpoint del clúster
Establezca Primary Node Accepts Read Requests en Yes para el endpoint del clúster. Consulte Configure a database proxy.
Paso 3: Crear la base de datos de prueba
Ejecute el siguiente comando en la instancia de ECS para crear una base de datos llamada testdb:
mysql -h <host> -P <port> -u <username> -p <password> -e 'create database testdb'
|
Parámetro |
Descripción |
|
|
Endpoint del clúster |
|
|
Número de puerto |
|
|
Nombre de usuario de la base de datos |
|
|
Contraseña del usuario |
Paso 4: Ejecutar las pruebas de escenario
Cada escenario sigue el mismo patrón de tres fases: prepare → run → cleanup. Todos los ejemplos utilizan los mismos parámetros base:
|
Parámetro |
Valor |
Descripción |
|
|
|
Controlador de la base de datos |
|
|
|
Base de datos de destino |
|
|
|
Filas por tabla |
|
|
|
Cantidad de tablas |
|
|
|
Sin límite de eventos (se ejecuta hasta que expire el tiempo) |
|
|
|
Duración de la prueba en segundos |
|
|
|
Tipo de distribución de datos |
|
|
Su valor |
Hilos concurrentes; increméntelos entre ejecuciones para encontrar el rendimiento máximo |
Los resultados de la prueba muestran los siguientes campos:
|
Categoría del parámetro |
Contenido mostrado |
Descripción |
|
|
Cantidad de tablas de datos |
La cantidad total de tablas de datos en la prueba |
|
|
Cantidad de filas en la tabla de datos |
La cantidad de registros en cada tabla |
|
Tamaño del volumen de datos |
— |
El volumen de datos de la tabla, en unidades como MB o GB |
|
|
Cantidad de hilos concurrentes |
La cantidad de hilos configurada actualmente |
|
Estado de los hilos |
— |
Permite consultar el estado de ejecución de los hilos en tiempo real |
Prueba de solo lectura (oltp_read_only)
Esta prueba usa--range-selects=0, lo cual limita la carga de trabajo a selecciones puntuales. Equivale al escenariooltp_point_selects.
-
Prepare los datos:
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_only prepare -
Ejecute la prueba:
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_only run -
Limpie los datos:
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_only cleanup
Prueba mixta de lectura y escritura (oltp_read_write)
Esta prueba simula una carga de trabajo empresarial típica de lectura y escritura combinadas.
Los parámetros principales, comotables,table-sizeythreads, se muestran de forma individual en la página de datos de prueba.
-
Prepare los datos:
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_write prepare -
Ejecute la prueba:
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_write run -
Limpie los datos:
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_write cleanup
Prueba de solo escritura (oltp_write_only)
Los parámetros principales, comotables,table-sizeythreads, se muestran de forma individual en la página de datos de prueba.
-
Prepare los datos:
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_write_only prepare -
Ejecute la prueba:
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_write_only run -
Limpie los datos:
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_write_only cleanup