Este documento aborda o ambiente de teste, o procedimento de configuração e os resultados de QPS dos benchmarks Sysbench executados no PolarDB-X com os mecanismos MySQL 5.7 e MySQL 8.0. Use esses resultados para avaliar se o PolarDB-X atende aos seus requisitos de throughput OLTP ou siga o procedimento para reproduzir os testes em seu próprio ambiente.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma conta Alibaba Cloud com permissões para criar instâncias ECS e PolarDB-X
Acesso a uma Virtual Private Cloud (VPC) para implantar todas as instâncias
Ambiente de teste
Conjunto de dados de teste
Tabelas: 16
Linhas por tabela: 10.000.000
Especificações da instância
|
Especificações |
Nós |
|
4C32G |
2 |
|
4C32G |
4 |
|
8C64G |
2 |
|
8C64G |
4 |
Máquina de teste de estresse
ecs.g7ne.8xlarge (32 vCPUs, 128 GB de memória)
Configure o ambiente de teste
Etapa 1: Crie uma instância ECS
Crie uma instância Elastic Compute Service (ECS) para hospedar a ferramenta de teste de estresse. Para evitar gargalos de desempenho ao testar instâncias PolarDB-X de alta especificação, use uma instância com 32 vCPUs e 128 GB de memória.
Implante a instância ECS em uma VPC. Anote o nome e o ID da VPC — todas as instâncias de banco de dados criadas nas etapas subsequentes devem residir na mesma VPC.
Etapa 2: Crie uma instância PolarDB-X
-
Crie uma instância PolarDB-X. Selecione o mecanismo MySQL 5.7 ou MySQL 8.0 conforme suas necessidades. Para obter instruções, consulte Criar uma instância PolarDB-X.
A instância PolarDB-X e a instância ECS devem residir na mesma VPC.
-
Crie um banco de dados chamado
sbtest. Para obter instruções, consulte Criar um banco de dados.CREATE DATABASE sbtest;
Etapa 3: Configure parâmetros da instância
Modifique os parâmetros do nó de computação para obter o melhor desempenho durante o teste de estresse.
-
Defina os seguintes parâmetros. Para obter instruções, consulte Configurações de parâmetros.
Parâmetro
Valor
ENABLE_COROUTINEtrueXPROTO_MAX_DN_CONCURRENT4000XPROTO_MAX_DN_WAIT_CONNECTION4000 -
Conecte-se à instância PolarDB-X usando um cliente de linha de comando e execute as seguintes instruções SQL na mesma sessão para desativar o log e a amostragem estatística de CPU:
set global RECORD_SQL=false; set global MPP_METRIC_LEVEL=0; set global ENABLE_CPU_PROFILE=false; set global ENABLE_TRANS_LOG=false;
Etapa 4: Instale o Sysbench e prepare os dados
-
Baixe o pacote sysbench.tar.gz e descompacte-o:
tar xzvf sysbench.tar.gz cd sysbench/ -
Instale e compile as dependências:
Você também pode baixar o Sysbench diretamente do GitHub .
yum -y install make automake libtool pkgconfig libaio-devel mysql-devel ./autogen.sh ./configure make -j make installVerifique a instalação executando
sysbench --version. Uma instalação bem-sucedida retornasysbench 1.1.0. -
Crie o arquivo de configuração
sysb.confcom os detalhes de conexão do PolarDB-X:Parâmetro
Descrição
percentilePercentil usado para amostrar o tempo de resposta. Defina como
95para latência do 95º percentil.histogramExibição do histograma de distribuição do tempo de resposta.
report-intervalIntervalo de exibição dos resultados em tempo real, em segundos.
timeDuração do teste de estresse, em segundos.
rand-typeTipo de distribuição para geração de números aleatórios.
mysql-host='<HOST>' mysql-port='<PORT>' mysql-user='<USER>' mysql-password='<PASSWORD>' mysql-db='sbtest' db-driver='mysql' percentile='95' histogram='on' report-interval='1' time='60' rand-type='uniform' -
Importe os dados de teste:
Parâmetro
Descrição
config-fileCaminho para o arquivo de configuração comum.
create-table-optionsModo de criação de tabela. Usa a sintaxe
dbpartition by hash(id)do PolarDB-X.tablesNúmero de tabelas a serem criadas.
table-sizeNúmero de linhas por tabela.
threadsNúmero de threads simultâneas para importação de dados.
auto_incUso de
AUTO_INCREMENT. Defina comooffpara este teste.sysbench --config-file='sysb.conf' \ --create-table-options='dbpartition by hash(id)' \ --tables='16' \ --table-size='10000000' \ --threads='16' \ --auto_inc='off' \ oltp_point_select prepare
Etapa 5: Aquecer o cache de buffer
Antes de coletar os resultados, execute uma passagem de aquecimento para carregar os dados do disco na memória. Ignorar esta etapa faz com que a primeira execução produza um QPS menor devido a leituras com cache frio.
sysbench --config-file='sysb.conf' \
--db-ps-mode='disable' \
--mysql-ignore-errors='all' \
--tables='16' \
--table-size='10000000' \
--threads=<threads> \
oltp_point_select run
Recomendamos aumentar a duração desta primeira execução para permitir que o cache estabilize antes da coleta dos resultados de benchmark.
Etapa 6: Execute os testes de estresse
Execute os comandos a seguir para testar cada uma das seis cargas de trabalho OLTP do Sysbench. Substitua <threads> pelo número de threads simultâneas.
Parâmetros usados em todos os comandos de execução:
|
Parâmetro |
Descrição |
|
|
Ativação do modo de instrução preparada. Defina como |
|
|
Códigos de erro do MySQL a ignorar, como erros de conflitos de bloqueio. Defina como |
|
|
Tamanho do intervalo para consultas de faixa (aplica-se a |
oltp_point_select
sysbench --config-file='sysb.conf' \
--db-ps-mode='disable' \
--mysql-ignore-errors='all' \
--tables='16' \
--table-size='10000000' \
--threads=<threads> \
oltp_point_select run
oltp_read_only
sysbench --config-file='sysb.conf' \
--db-ps-mode='disable' \
--mysql-ignore-errors='all' \
--tables='16' \
--table-size='10000000' \
--range-size=5 \
--threads=<threads> \
oltp_read_only run
oltp_read_write
sysbench --config-file='sysb.conf' \
--db-ps-mode='disable' \
--mysql-ignore-errors='all' \
--tables='16' \
--table-size='10000000' \
--range-size=5 \
--threads=<threads> \
oltp_read_write run
oltp_update_index
sysbench --config-file='sysb.conf' \
--db-ps-mode='disable' \
--mysql-ignore-errors='all' \
--tables='16' \
--table-size='10000000' \
--threads=<threads> \
oltp_update_index run
oltp_update_non_index
sysbench --config-file='sysb.conf' \
--db-ps-mode='disable' \
--mysql-ignore-errors='all' \
--tables='16' \
--table-size='10000000' \
--threads=<threads> \
oltp_update_non_index run
oltp_write_only
sysbench --config-file='sysb.conf' \
--db-ps-mode='disable' \
--mysql-ignore-errors='all' \
--tables='16' \
--table-size='10000000' \
--threads=<threads> \
oltp_write_only run
Resultados dos testes
Os resultados são medidos em QPS (consultas por segundo). Cada linha mostra a contagem de threads em que se observou o pico de QPS para aquela configuração.
MySQL 5.7
Versão do PolarDB-X:
polardb-2.4.0_5.4.19-20240610_xcluster5.4.19-20240527. Para mais detalhes, consulte Notas de versão.Nos resultados de teste a seguir, os valores de QPS medem o desempenho do banco de dados.
Point select

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
1.000 |
201.462,73 |
|
4C32G×4 |
1.000 |
324.683,03 |
|
8C64G×2 |
1.000 |
308.174,91 |
|
8C64G×4 |
2.000 |
635.865,65 |
Read-only

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
600 |
62.446,59 |
|
4C32G×4 |
1.000 |
94.930,57 |
|
8C64G×2 |
1.000 |
88.487,24 |
|
8C64G×4 |
2.000 |
162.330,95 |
Read-write

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
600 |
43.098,16 |
|
4C32G×4 |
600 |
68.750,24 |
|
8C64G×2 |
600 |
57.730,62 |
|
8C64G×4 |
600 |
111.261,22 |
Update index

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
600 |
49.530,87 |
|
4C32G×4 |
600 |
86.850,17 |
|
8C64G×2 |
600 |
65.750,01 |
|
8C64G×4 |
1.000 |
137.154,16 |
Update non-index

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
400 |
50.627,05 |
|
4C32G×4 |
1.000 |
90.555,72 |
|
8C64G×2 |
1.000 |
68.838,02 |
|
8C64G×4 |
1.000 |
137.071,73 |
Write-only

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
400 |
38.636,02 |
|
4C32G×4 |
600 |
70.974,3 |
|
8C64G×2 |
600 |
52.344,94 |
|
8C64G×4 |
600 |
101.282,38 |
MySQL 8.0
Versão do PolarDB-X:
polardb-2.4.0_5.4.19-20240610_xcluster8.4.19-20240523. Para mais detalhes, consulte Notas de versão.Nos resultados de teste a seguir, os valores de QPS medem o desempenho do banco de dados.
Point select

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
1.000 |
166.590,48 |
|
4C32G×4 |
1.000 |
288.516,53 |
|
8C64G×2 |
1.000 |
350.510,72 |
|
8C64G×4 |
2.000 |
637.414,68 |
Read-only

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
600 |
59.770,01 |
|
4C32G×4 |
1.000 |
71.259,87 |
|
8C64G×2 |
1.000 |
69.829,69 |
|
8C64G×4 |
2.000 |
128.366,39 |
Read-write

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
600 |
56.134,05 |
|
4C32G×4 |
600 |
55.817,45 |
|
8C64G×2 |
600 |
60.482,86 |
|
8C64G×4 |
600 |
92.855,15 |
Update index

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
600 |
37.474,15 |
|
4C32G×4 |
600 |
57.344,42 |
|
8C64G×2 |
600 |
55.856,94 |
|
8C64G×4 |
1.000 |
87.618,81 |
Update non-index

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
400 |
38.017,57 |
|
4C32G×4 |
1.000 |
60.779,25 |
|
8C64G×2 |
1.000 |
58.065,02 |
|
8C64G×4 |
1.000 |
91.060,65 |
Write-only

|
Especificações |
Threads simultâneas |
QPS |
|
4C32G×2 |
400 |
29.476,72 |
|
4C32G×4 |
600 |
47.558,73 |
|
8C64G×2 |
600 |
41.032,61 |
|
8C64G×4 |
600 |
65.794,57 |