O PostgreSQL compatível com Oracle oferece o pgbench, uma ferramenta leve para testes de estresse. Com ela, é possível executar benchmarks no PostgreSQL por meio da execução repetida de uma mesma sequência de instruções SQL em várias sessões simultâneas de banco de dados. Este tópico descreve como utilizar o pgbench para testar o desempenho máximo de clusters do PolarDB for PostgreSQL (Compatible with Oracle).
Ambientes de teste
Todos os testes devem ser realizados na região China (Qingdao). O cluster PolarDB precisa estar na mesma zona da instância ECS.
Tipo de instância ECS: ecs.g5.16xlarge (64 vCPUs, 256 GiB)
Armazenamento ECS: SSDs locais de 200 GiB
Tipo de rede: virtual private cloud (VPC). O cluster PolarDB e a instância ECS devem pertencer à mesma VPC.
Sistema operacional: versão de 64 bits do CentOS 7.6
Quantidade de nós no cluster PolarDB: um nó primário e um nó somente leitura
O CentOS 6 não oferece suporte ao PostgreSQL 11.
Métricas de teste
-
Consultas somente leitura por segundo (QPS)
Quantidade de instruções SELECT executadas por segundo durante operações somente leitura no banco de dados.
-
QPS de leitura e escrita
Quantidade de instruções SELECT, INSERT e UPDATE executadas por segundo durante operações de leitura e escrita no banco de dados.
Antes de começar
-
Instale o PostgreSQL 11.
Execute os comandos abaixo para instalar o PostgreSQL 11 na sua instância ECS.
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql11 -
Configure os parâmetros do seu cluster PolarDB.
No cluster
PolarDB
, defina os seguintes parâmetros:
log_statement = 'none' enable_hashjoin=off enable_mergejoin=off enable_bitmapscan=offNotaApenas o parâmetro
log_statement
pode ser configurado diretamente no console do PolarDB. Para mais detalhes sobre a configuração de parâmetros de cluster, consulte
Configurar parâmetros de cluster
.
Após configurar os parâmetros, reinicie o cluster PolarDB para que as alterações entrem em vigor.
Métodos de teste
-
Defina as variáveis de ambiente com os comandos a seguir:
export PGHOST=<The internal endpoint of your PolarDB cluster> export PGPORT=<The internal port number of your PolarDB cluster> export PGDATABASE=postgres export PGUSER=<The username used to log on to your PolarDB database> export PGPASSWORD=<The password of your PolarDB account>NotaPara saber como visualizar os endpoints de clusters
PolarDB for PostgreSQL (Compatible with Oracle)
, consulte
.
-
Inicialize os dados de teste conforme o tamanho do banco de dados desejado.
-
Para inicializar 1 bilhão de registros, execute:
/usr/pgsql-11/bin/pgbench -i -s 10000 -
Para inicializar 500 milhões de registros, execute:
/usr/pgsql-11/bin/pgbench -i -s 5000 -
Para inicializar 100 milhões de registros, execute:
/usr/pgsql-11/bin/pgbench -i -s 1000
-
-
Crie scripts de teste para operações somente leitura e de leitura/escrita.
-
Elabore um script para testar operações somente leitura e nomeie-o como ro.sql.
Execute o comando
vim ro.sql.Pressione a tecla I para entrar no modo de edição.
-
Insira o seguinte conteúdo no editor:
\set aid random_gaussian(1, :range, 10.0) SELECT abalance FROM pgbench_accounts WHERE aid = :aid; Pressione Esc para sair do modo de edição e digite
:wqpara salvar o arquivo e fechar o editor.
-
Elabore um script para testar operações de leitura e escrita e nomeie-o como rw.sql.
Execute o comando
vim rw.sql.Pressione a tecla I para entrar no modo de edição.
-
Insira o seguinte conteúdo no editor:
\set aid random_gaussian(1, :range, 10.0) \set bid random(1, 1 * :scale) \set tid random(1, 10 * :scale) \set delta random(-5000, 5000) BEGIN; UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; SELECT abalance FROM pgbench_accounts WHERE aid = :aid; UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); END; Pressione Esc para sair do modo de edição e digite
:wqpara salvar o arquivo e fechar o editor.
-
-
Execute os comandos abaixo para realizar os testes:
-
Teste as operações somente leitura com os seguintes comandos:
88C 710 GB(polar.o.x8.12xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=1000000000 64C 512 GB(polar.o.x8.8xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=1000000000 32C 256 GB(polar.o.x8.4xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=1000000000 16cC 128 GB(polar.o.x8.2xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=1000000000 8C 64 GB(polar.o.x8.xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=1000000000 8C 32 GB(polar.o.x4.xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=1000000000 4C 16 GB(polar.o.x4.large) Total data volume: 500 million records, hot data: 50 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 32 -j 32 -T 120 -D scale=5000 -D range=50000000 Total data volume: 500 million records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 32 -j 32 -T 120 -D scale=5000 -D range=100000000 2C 4 GB(polar.o.x4.medium) Total data volume: 100 million records, hot data: 50 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 16 -j 32 -T 120 -D scale=1000 -D range=50000000 Total data volume: 100 million records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 16 -j 32 -T 120 -D scale=1000 -D range=100000000 -
Teste as operações de leitura e escrita com os seguintes comandos:
88C 710 GB(polar.o.x8.12xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=1000000000 64C 512 GB(polar.o.x8.8xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=1000000000 32C 256 GB(polar.o.x8.4xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=1000000000 16C 128 GB(polar.o.x8.2xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=1000000000 8C 64 GB(polar.o.x8.xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=1000000000 8C 32 GB(polar.o.x4.xlarge) Total data volume: 1 billion records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion records, hot data: 500 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion records, hot data: 1 billion records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=1000000000 4C 16 GB(polar.o.x4.large) Total data volume: 500 million records, hot data: 50 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 16 -j 16 -T 120 -D scale=5000 -D range=50000000 Total data volume: 500 million records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 16 -j 16 -T 120 -D scale=5000 -D range=100000000 2C 8 GB(polar.o.x4.medium) Total data volume: 100 million records, hot data: 50 million records /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 8 -j 8 -T 120 -D scale=1000 -D range=50000000 Total data volume: 100 million records, hot data: 100 million records /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 8 -j 8 -T 120 -D scale=1000 -D range=100000000
Notascale: O valor de scale multiplicado por 100.000 representa a quantidade total de registros de dados de teste.
range: Define a quantidade de registros de dados quentes.
-c: Determina o número de conexões utilizadas no teste. Esse valor não corresponde necessariamente ao limite máximo de conexões suportadas pelo tipo de cluster. Para mais informações, consulte Especificações de nós de computação.
-
Resultados dos testes
| Código da especificação | Quantidade de registros de dados de teste | Quantidade de registros de dados quentes (ativos) | QPS somente leitura | QPS de leitura e escrita |
polar.o.x8.12xlarge 88 núcleos, 710 GB | 1 bilhão | 100 milhões | 630.650,40 | 263.746,37 |
| 500 milhões | 601.262,24 | 247.352,76 | ||
| 1 bilhão | 589.405,79 | 218.788,92 | ||
polar.o.x8.8xlarge 64 núcleos, 512 GB | 1 bilhão | 100 milhões | 592.064,65 | 227.352,23 |
| 500 milhões | 554.777,11 | 213.343,13 | ||
| 1 bilhão | 508.404,07 | 203.331,35 | ||
polar.o.x8.4xlarge 32 núcleos, 256 GB | 1 bilhão | 100 milhões | 522.182,92 | 213.212,34 |
| 500 milhões | 509.372,85 | 203.322,34 | ||
| 1 bilhão | 489.349,72 | 198.531,37 | ||
polar.o.x8.2xlarge 16 núcleos, 128 GB | 1 bilhão | 100 milhões | 263.893,72 | 152.863,27 |
| 500 milhões | 250.221,62 | 129.238,26 | ||
| 1 bilhão | 239.832,62 | 106.212,82 | ||
polar.o.x8.xlarge 8 núcleos, 64 GB | 1 bilhão | 100 milhões | 142.836,56 | 69.725,29 |
| 500 milhões | 133.931,69 | 55.927,65 | ||
| 1 bilhão | 124.151,02 | 50.786,21 | ||
polar.o.x4.xlarge 8 núcleos, 32 GB | 1 bilhão | 100 milhões | 126.748,07 | 59.738,33 |
| 500 milhões | 113.432,32 | 48.372,25 | ||
| 1 bilhão | 104.232,84 | 49.763,64 | ||
polar.o.x4.large 4 núcleos, 16 GB | 500 milhões | 50 milhões | 76.238,89 | 47.388,27 |
| 100 milhões | 69.892,83 | 43.638,85 | ||
polar.o.x4.medium 2 núcleos, 8 GB | 100 milhões | 50 milhões | 28.320,70 | 18.152,63 |
| 100 milhões | 30.792,19 | 19.111,15 |
Código da especificação: identificador das especificações do PolarDB for PostgreSQL (Compatible with Oracle).
Quantidade de registros de dados de teste: total de registros utilizados no teste.
Quantidade de registros de dados quentes (ativos): volume de registros envolvidos nas consultas e atualizações SQL durante o teste.
QPS somente leitura: número de requisições somente leitura processadas por segundo.
QPS de leitura e escrita: número de requisições de leitura e escrita processadas por segundo.







