Почему сервер MySQL работает медленнее на RDS, чем на EC2? - PullRequest
1 голос
/ 26 июня 2019

Я только что провел тестирование производительности с mysqlslap для сервера MySQL на RDS и сервера MySQL на экземпляре EC2.

Ниже приведены мои параметры и результат теста:

  • Версия MySQL: 5.6.44
  • Тип экземпляра RDS: db.t3.large
  • Тип экземпляра EC2: t3.large
  • Тип хранилища RDS:General Purpose (SSD)
  • EC2 AMI: amzn2-ami-hvm-2.0.20190618-x86_64-gp2
  • Группа параметров RDS: default.mysql5.6
  • RDS Multi AZ: No
  • Регион RDS:tokyo
  • Регион EC2: tokyo
  • Шифрование EC2 EBS: enabled
  • Размер хранилища EC2 EBS: 100GB
  • RDSРазмер хранилища: 100GB
  • Информация о производительности RDS: disabled

Оба сервера MySQL на RDS и экземпляр EC2 созданы заново.Они не содержат никаких данных перед запуском mysqlslap.

Экземпляр EC2 также только что создан.Я только установил сервер MySQL на нем.Я ничего не изменил в экземпляре.

mysqlslap был запущен с моего локального MacBook Pro.

Сервер MySQL на экземпляре EC2 устанавливается путем запуска sudo su && wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm && rpm -ivh mysql-community-release-el6-5.noarch.rpm && yum install mysql-server && /etc/init.d/mysqld start

Вот результат тестирования производительности:

# MySQL on RDS benchmark testing result:
mysqlslap --host=loadtest.xxxxxxxxx.xx-xx-x.rds.amazonaws.com \
  --user=myusername \
  --password=mypassword \
  --create-schema=load_test_table \
  -vv \
  --concurrency=50 --iterations=5 \
  --auto-generate-sql 

Building Create Statements for Auto
Building Query Statements for Auto
Parsing engines to use.
Starting Concurrency Test
Loading Pre-data
Generating primary key list
Loading Pre-data
Generating primary key list
Loading Pre-data
Generating primary key list
Loading Pre-data
Generating primary key list
Loading Pre-data
Generating primary key list
Generating stats
Benchmark
Average number of seconds to run all queries: 4.362 seconds
Minimum number of seconds to run all queries: 3.134 seconds
Maximum number of seconds to run all queries: 7.581 seconds
Number of clients running queries: 50
Average number of queries per client: 0
# MySQL on EC2 benchmark testing result:
mysqlslap --host=<ec2's ip address> \
  --user=myusername \
  --password=mypassword \
  --create-schema=load_test_table \
  -vv \
  --concurrency=50 --iterations=5 \
  --auto-generate-sql 

Building Create Statements for Auto
Building Query Statements for Auto
Parsing engines to use.
Starting Concurrency Test
Loading Pre-data
Generating primary key list
Loading Pre-data
Generating primary key list
Loading Pre-data
Generating primary key list
Loading Pre-data
Generating primary key list
Loading Pre-data
Generating primary key list
Generating stats
Benchmark
Average number of seconds to run all queries: 2.196 seconds
Minimum number of seconds to run all queries: 2.000 seconds
Maximum number of seconds to run all queries: 2.445 seconds
Number of clients running queries: 50
Average number of queries per client: 0

Кредитный баланс ЦП на обоих серверах MySQL выше 0 при работе mysqlslap.Таким образом, проблема исчерпания кредитного баланса процессора не существует.

Как видно из результатов теста, сервер MySQL на RDS работает примерно вдвое медленнее, чем сервер MySQL на экземпляре EC2.

Почему это происходит?

Есть ли какие-либо параметры, которые я могу настроить, чтобы сервер MySQL на RDS работал так же хорошо, как на экземпляре EC2?

Здесь - это вывод SHOW GLOBAL VARIABLES; MySQL EC2.

Здесь - это вывод SHOW GLOBAL VARIABLES; RDS MySQL.

Here является результатом SHOW GLOBAL STATUS; MySQL EC2 после выполнения 3 тестов производительности.

И здесь является результатом SHOW GLOBAL STATUS; RDS MySQL после выполнения 3 тестов производительности.

Я обнаружил, что отключение sync_binlog в RDS MySQL повышает его производительность.Но производительность RDS MySQL по-прежнему ниже, чем у EC2 MySQL.

...