Оценка производительности на основе экземпляра Huawei Cloud Yaoyun Server L | Оценка производительности MySQL

Оценка производительности на основе экземпляра Huawei Cloud Yaoyun Server L | Оценка производительности MySQL

1. Введение в тестовую среду

  По мере того как эра облачных вычислений продолжает углубляться, все больше и больше малых и средних предприятий и разработчиков нуждаются в простом в использовании, мощном и эффективном продукте инфраструктуры облачных вычислений для поддержки своих бизнес-операций и инновационного развития. Учитывая этот спрос, Huawei Cloud запустила новый продукт — экземпляры серверов Huawei Cloud.
  Облачные серверы Huawei обладают четырьмя преимуществами: они интеллектуальны и не зависают, доступны по цене и просты в использовании, просты в начале работы и обеспечивают беспроблемное управление, что помогает вам быстро добраться до облака.
  В этой статье будет использоватьсяЭкземпляр Huawei Cloud Yaoyun Server LПроведите тест производительности службы MySQL.
  Способ покупки : Ссылка на официальный канал — экземпляр Huawei Cloud Server L.
Вставьте сюда описание изображения
 
Вставьте сюда описание изображения
 
Вставьте сюда описание изображения
 
Вставьте сюда описание изображения
 

2. Настройте тестовую среду.

модель Пример операционной системы Процессор Память жесткий диск Версия MySQL
Экземпляр облачного сервера Yunyao L Облако Huawei EulerOS 2.0 2 ядра 2G Системный диск 40 ГиБ MySQL8.0.33

  Выбор операционной системы: Huawei Cloud EulerOS(сокращенно HCE OS) — это операционная система Linux, созданная на основе сообщества Huawei с открытым исходным кодом openEuler. Она обеспечивает облачную, высокопроизводительную, безопасную и стабильную среду выполнения для разработки и запуска приложений, помогая корпоративным клиентам и разработчикам. быстро мигрировать в облако.Инновации.

   Основными показателями производительности MySQL являются:
   ● TPS: Transactions Per Second, то есть количество транзакций, выполняемых базой данных в секунду, commitв зависимости от количества успешных операций.
   ● QPS: Queries Per Second, то есть количество выполнений базы данных в секунду SQL(включая вставку, выбор, обновление, удаление и т. д.).
   ● RT: Response Time, время отклика. Включая среднее время ответа, минимальное время ответа, максимальное время ответа и долю запросов в каждом времени ответа. На что нужно ориентироваться, так это на первые 95-99% максимального времени отклика, так как это в большинстве случаев определяет недостатки.
   ● Concurrency Threads: Параллелизм, количество запросов, которые могут быть обработаны в секунду.

Этот тест производительности в основном фокусируется на двух показателях: пропускной способности и задержке.

Huawei Cloud EulerOSУстановите развертывание в операционную    систему MySQL 8.0.3:

[root@hcss-ecs-3501 ~]# yum install -y gcc-c++ openssl  openssl-devel make bison ncurses-devel
[root@hcss-ecs-3501 ~]# yum install -y libtirpc libtirpc-devel rpcgen m4
[root@hcss-ecs-3501 ~]# tar xvf cmake-3.25.3.tar.gz 
[root@hcss-ecs-3501 ~]# cd cmake-3.25.3
[root@hcss-ecs-3501 ~]# ./bootstrap 
[root@hcss-ecs-3501 ~]# make && make install 
[root@hcss-ecs-3501 ~]# ln -s /usr/local/bin/cmake /usr/bin/
[root@hcss-ecs-3501 ~]# cmake --version
cmake version 3.25.3
[root@hcss-ecs-3501 ~]# tar xvf boost_1_77_0.tar.gz 
[root@hcss-ecs-3501 ~]# cd boost_1_77_0
[root@hcss-ecs-3501 boost_1_77_0]# ./bootstrap.sh --prefix=/usr/local/
[root@hcss-ecs-3501 boost_1_77_0]# ./b2 install


[root@hcss-ecs-3501 ~]# tar xvf mysql-8.0.33.tar.gz 
[root@hcss-ecs-3501 ~]# cd mysql-8.0.33
[root@hcss-ecs-3501 mysql-8.0.33]# mkdir build
[root@hcss-ecs-3501 mysql-8.0.33]# cd build/
[root@hcss-ecs-3501 mysql-8.0.33]# cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/var/lib/mysql \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost

[root@hcss-ecs-3501 mysql-8.0.33]# make && make install

   Настройте MySQL:

[root@hcss-ecs-3501 ~]# groupadd mysql
[root@hcss-ecs-3501 ~]# useradd -r -g mysql -s /bin/false mysql
[root@hcss-ecs-3501 ~]# cd /usr/local/mysql
[root@hcss-ecs-3501 mysql]# chown -R mysql:mysql .
[root@hcss-ecs-3501 mysql]# bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql

   Настройте MySQL на автоматический запуск при загрузке:

[root@hcss-ecs-3501 mysql]# cp support-files/mysql.server /etc/init.d/mysql
[root@hcss-ecs-3501 mysql]# chkconfig --add mysql
[root@hcss-ecs-3501 mysql]# chkconfig mysql on
cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
log-error=/var/lib/mysql/mysql.log
pid-file=/var/lib/mysql/mysql.pid
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_connections=1024	# 设置最大连接数
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/lib/mysql/mysql.log
pid-file=/var/lib/mysql/mysql.pid
socket=/tmp/mysql.sock

   Настройте безопасность:

/usr/local/mysql/bin/mysql_secure_installation
ln -s /usr/local/mysql/bin/mysqlslap /usr/bin/
ln -s /usr/local/mysql/bin/mysql /usr/bin/

mysql -u root -p
Enter password: 

# 查看最大连接数
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1024  |
+-----------------+-------+
1 row in set (0.01 sec)

  Операционная система не была оптимизирована и настроена, используется конфигурация по умолчанию. Внесены изменения в максимальное количество соединений для MySQL.

3. Инструменты тестирования

3.1. mysqlslap

  Mysqlslap официально предоставляется MySQL и обеспечивает тесты производительности для различных механизмов.По сравнению с sysbench, процесс тестирования mysqlslap относительно прост.Одна команда может завершить весь процесс.

mysqlslap \
--defaults-file=/etc/my.cnf  \
--concurrency=100,1000 \
--iterations=3 \
--number-int-cols=20 \
--number-char-cols=30 \
--auto-generate-sql \
--auto-generate-sql-add-autoincrement \
--auto-generate-sql-load-type=mixed \
--engine=innodb \
--number-of-queries=10000 \
--create-schema=mydb \
-uroot \
-p123456

  Дважды смоделируйте тест одновременного чтения и записи: в первый раз — 100, во второй раз — 1000, тестовая таблица содержит 20 полей инициализации, 30 полей символов, и каждый раз выполняется 10 000 запросов. Тестовый движок — innodb.

   ● --concurrency: Параллельность, т. е. количество клиентов, которые моделируются для одновременного выполнения команд. Можно указать несколько значений, используя запятые или --delimiterзначение, указанное параметром в качестве разделителя.
   ● --iterations: количество итераций выполнения теста.
   ● --number-int-cols: сколько числовых столбцов включено в автоматически создаваемую тестовую таблицу, по умолчанию 1.
   ● --number-char-cols: сколько столбцов типов символов включено в автоматически создаваемую тестовую таблицу, по умолчанию 1.
   ● --auto-generate-sql: автоматическое создание тестовых таблиц и данных. Эффект этой команды аналогичен действию sysbenchкоманды prepare.
   ● --auto-generate-sql-add-autoincrement: добавить auto_incrementстолбец.
Если вы хотите просмотреть конкретный сгенерированный сценарий, вы можете использовать –only-printкоманду только для печати тестового оператора без его фактического выполнения.
   ● --engine: механизм хранения, используемый для создания тестовой таблицы, можно указать несколько.
   ● --number-of-queries: общее количество тестовых запросов (количество одновременных клиентов × количество запросов на одного клиента).
   ● --create-schema: для тестирования это имя базы данных schemaв MySQL (на самом деле оно не создает библиотеку).    ● : установите учетную запись и пароль MySQL.schemadatabase
-uroot -p123456

mysqlslap: [Warning] Using a password on the command line interface can be insecure.
Benchmark
	Running for engine innodb
	Average number of seconds to run all queries: 1.863 seconds
	Minimum number of seconds to run all queries: 1.777 seconds
	Maximum number of seconds to run all queries: 1.945 seconds
	Number of clients running queries: 100
	Average number of queries per client: 100

Benchmark
	Running for engine innodb
	Average number of seconds to run all queries: 2.160 seconds
	Minimum number of seconds to run all queries: 2.077 seconds
	Maximum number of seconds to run all queries: 2.223 seconds
	Number of clients running queries: 1000
	Average number of queries per client: 10

  Описание результатов теста:
  Innodb использует скорость 1,863/с, когда 100 клиентов одновременно инициируют дополнительные запросы в первый раз, и 2,160/с, когда 1000 клиентов одновременно инициируют дополнительные запросы во второй раз.

3.2. системный тест

   sysbench в основном используется для оценки и тестирования нагрузки базы данных при различных параметрах системы. Тесты OLTP необходимо /usr/share/sysbench/выполнять с помощью сценариев Lua в каталоге, например, oltp_read_only.luaсценарий выполняет тесты только для чтения.
   sysbench также может настраивать тесты, указав собственный сценарий Lua при запуске команды.

   Инструменты для установки:

[root@hcss-ecs-3501 ~]# yum install m4 autoconf automake libtool -y

[root@hcss-ecs-3501 ~]# find /  -name 'libmysqlclient*' 
/root/mysql-8.0.33/packaging/deb-in/libmysqlclient-dev.lintian-overrides.in
/root/mysql-8.0.33/packaging/deb-in/libmysqlclient21.install.in
/root/mysql-8.0.33/packaging/deb-in/libmysqlclient21-dbgsym.install.in
/root/mysql-8.0.33/packaging/deb-in/libmysqlclient-dev.install.in
/root/mysql-8.0.33/packaging/deb-in/libmysqlclient21.lintian-overrides.in
/root/mysql-8.0.33/build/library_output_directory/libmysqlclient.so.21
/root/mysql-8.0.33/build/library_output_directory/libmysqlclient.so
/root/mysql-8.0.33/build/library_output_directory/libmysqlclient.so.21.2.33
/root/mysql-8.0.33/build/archive_output_directory/libmysqlclient.a
/usr/local/mysql/lib/libmysqlclient.a
/usr/local/mysql/lib/libmysqlclient.so.21
/usr/local/mysql/lib/libmysqlclient.so
/usr/local/mysql/lib/libmysqlclient.so.21.2.33

[root@hcss-ecs-3501 ~]# ln -s /usr/local/mysql/lib/libmysqlclient.so.21 /usr/local/lib/libmysqlclient.so.20
[root@hcss-ecs-3501 ~]# echo /usr/local/lib  >> /etc/ld.so.conf
[root@hcss-ecs-3501 ~]# /sbin/ldconfig -v
[root@hcss-ecs-3501 ~]# tar xvf sysbench-1.0.20.tar.gz
[root@hcss-ecs-3501 ~]# cd sysbench-1.0.20
[root@hcss-ecs-3501 sysbench-1.0.20]# ./autogen.sh
[root@hcss-ecs-3501 sysbench-1.0.20]# ./configure
[root@hcss-ecs-3501 sysbench-1.0.20]#  make -j
[root@hcss-ecs-3501 sysbench-1.0.20]#  make install
[root@hcss-ecs-3501 sysbench-1.0.20]# sysbench --version
sysbench 1.0.20

  Узнайте, как использовать скрипт Lua, входящий в состав sysbench:

sysbench /usr/local/share/sysbench/oltp_common.lua help

   Подготовить данные (подготовить):

mysql> select user,host,password from mysql.user;
mysql> alter user root@'%' identified  with mysql_native_password by '123456';
mysql> flush privileges;
mysql> create database sbtest;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sbtest             |
| sys                |
+--------------------+
[root@hcss-ecs-3501 ~]# sysbench \
--mysql-port=3306 \
--mysql-user=root \
--mysql-password='123456' \
/usr/local/share/sysbench/oltp_common.lua \
--db-driver=mysql \
--report-interval=5  \
--time=300 \
--mysql-db=sbtest \
--table-size=100000 \
--tables=10 \
prepare

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)
Creating table 'sbtest1'...
Inserting 100000 records into 'sbtest1'
Creating a secondary index on 'sbtest1'...
Creating table 'sbtest2'...
Inserting 100000 records into 'sbtest2'
Creating a secondary index on 'sbtest2'...
Creating table 'sbtest3'...
Inserting 100000 records into 'sbtest3'
Creating a secondary index on 'sbtest3'...
Creating table 'sbtest4'...
Inserting 100000 records into 'sbtest4'
Creating a secondary index on 'sbtest4'...
Creating table 'sbtest5'...
Inserting 100000 records into 'sbtest5'
Creating a secondary index on 'sbtest5'...
Creating table 'sbtest6'...
Inserting 100000 records into 'sbtest6'
Creating a secondary index on 'sbtest6'...
Creating table 'sbtest7'...
Inserting 100000 records into 'sbtest7'
Creating a secondary index on 'sbtest7'...
Creating table 'sbtest8'...
Inserting 100000 records into 'sbtest8'
Creating a secondary index on 'sbtest8'...
Creating table 'sbtest9'...
Inserting 100000 records into 'sbtest9'
Creating a secondary index on 'sbtest9'...
Creating table 'sbtest10'...
Inserting 100000 records into 'sbtest10'
Creating a secondary index on 'sbtest10'...

   ● oltp_common.lua: тестовый сценарий выполнен. Поскольку для установки используется yum, вам нужно перейти в /usr/share/sysbench/каталог и просмотреть sysbenchвстроенный тестовый скрипт Lua.
   ● --time: максимальное общее время выполнения в секундах, значение по умолчанию — 10 секунд.
   ● --events: максимальное разрешенное количество событий, значение по умолчанию — 0, что должно --timeформировать максимальное время выполнения и количество повторений друг с другом.

   Параметры, связанные с MySQL:
   ● --mysql-host: Хост сервера MySQL
   ● --mysql-port: Порт сервера MySQL    ●
   : Учетная --mysql-userзапись сервера MySQL ● : Пароль сервера MySQL    ● : Имя базы данных сервера MySQL    ● : Количество записей таблицы    ● : Имя таблицы    ● : Количество потоков, которые будут использоваться, по умолчанию 1 ● : Периодически отправлять промежуточные статистические данные с указанными интервалами в секундах. Значение по умолчанию — 0, что означает, что промежуточные отчеты отключены.    ●    : Выполнять данные подготовки.
--mysql-password
--mysql-db
--table-size
--tables
--threads
--report-interval
prepare

  Подтвердите наличие тестовых данных:

[root@hcss-ecs-3501 ~]# mysql -u root -p123456 sbtest;
mysql> show tables;
+------------------+
| Tables_in_sbtest |
+------------------+
| sbtest1          |
| sbtest10         |
| sbtest2          |
| sbtest3          |
| sbtest4          |
| sbtest5          |
| sbtest6          |
| sbtest7          |
| sbtest8          |
| sbtest9          |
+------------------+
10 rows in set (0.00 sec)

  Случайным образом выберите таблицу и убедитесь, что она содержит 100 000 фрагментов данных:

mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.08 sec)

   Выполните тест (запустите):

   ● oltp_read_write.lua: /usr/share/sysbench/Ниже приведен . Этот сценарий представляет смешанное чтение и запись.В транзакции соотношение по умолчанию: select:update_key:update_non_key:delete:insert = 14:1:1:1:1. Вот почему протестированное нами соотношение TPS и QPS составляет примерно 1:20. Эквивалентно 18 операциям чтения и записи в одной транзакции.
   ● run: выполнить тест.

[root@hcss-ecs-3501 ~]# sysbench \
--time=300 \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-user=root \
--mysql-password=123456 \
/usr/local/share/sysbench/oltp_read_write.lua \
--mysql-db=sbtest \
--tables=10 \
--table_size=100000 \
--report-interval=5 \
run


sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 1
Report intermediate results every 5 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!
# 以下是每5秒返回一次的结果,统计的指标包括:
# 线程数、tps(每秒事务数)、qps(每秒查询数)、每秒的读//其它次数、延迟、每秒错误数、每秒重连次数

[ 5s ] thds: 1 tps: 110.56 qps: 2214.86 (r/w/o: 1550.68/442.85/221.33) lat (ms,95%): 15.27 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 1 tps: 142.00 qps: 2840.27 (r/w/o: 1988.05/568.21/284.01) lat (ms,95%): 9.73 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 1 tps: 148.60 qps: 2972.01 (r/w/o: 2080.41/594.40/297.20) lat (ms,95%): 9.39 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 1 tps: 154.20 qps: 3083.99 (r/w/o: 2158.79/616.80/308.40) lat (ms,95%): 8.74 err/s: 0.00 reconn/s: 0.00
......
[ 290s ] thds: 1 tps: 157.80 qps: 3155.23 (r/w/o: 2209.22/630.41/315.60) lat (ms,95%): 8.74 err/s: 0.00 reconn/s: 0.00
[ 295s ] thds: 1 tps: 156.60 qps: 3129.37 (r/w/o: 2189.78/626.39/313.20) lat (ms,95%): 8.74 err/s: 0.00 reconn/s: 0.00
[ 300s ] thds: 1 tps: 157.00 qps: 3143.33 (r/w/o: 2200.55/628.79/313.99) lat (ms,95%): 8.43 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            661290			# 执行的读操作数量 
        write:                           188940			# 执行的写操作数量
        other:                           94470			# 执行的其它操作数量
        total:                           944700
    transactions:                        47235  (157.45 per sec.)	# 执行事务的平均速率
    queries:                             944700 (3148.96 per sec.)	# 平均每秒能执行多少次查询
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          300.0028s		# 总消耗时间
    total number of events:              47235			# 总请求数量(读、写、其它)

Latency (ms):
         min:                                    3.92
         avg:                                    6.35
         max:                                  163.55
         95th percentile:                        8.58	# 采样计算的平均延迟
         sum:                               299879.21

Threads fairness:
    events (avg/stddev):           47235.0000/0.00
    execution time (avg/stddev):   299.8792/0.00

   Описание результатов теста:
   157 TPS+3148 QPS+задержка 8,58 мс

  Чистые данные (чистые):

sysbench \
--time=300 \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-user=root \
--mysql-password=123456 \
/usr/local/share/sysbench/oltp_read_write.lua \
--mysql-db=sbtest \
--tables=10 \
--table_size=100000 \
--report-interval=5 \
cleanup

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Dropping table 'sbtest1'...
Dropping table 'sbtest2'...
Dropping table 'sbtest3'...
Dropping table 'sbtest4'...
Dropping table 'sbtest5'...
Dropping table 'sbtest6'...
Dropping table 'sbtest7'...
Dropping table 'sbtest8'...
Dropping table 'sbtest9'...
Dropping table 'sbtest10'...

   Вывод: для двухъядерной конфигурации 2G экземпляра Huawei Cloud Yaoyun Server L при использовании инструмента mysqlslap 100 клиентов одновременно инициируют дополнительные запросы со скоростью 1,863/с, а 1000 клиентов одновременно инициируют дополнительные запросы со скоростью 2,160/с. Используя инструмент sysbench с 10 таблицами и 100 000 записей в каждой таблице, результат теста составил 157 TPS + 3148 QPS + задержка 8,58 мс. Он может в основном удовлетворить требования к производительности баз данных малых и средних предприятий.

Guess you like

Origin blog.csdn.net/wangzongyu/article/details/132907588