Мне бы хотелось несколько идей по ускорению выполнения следующего запроса:
SELECT BENCHMARK(1000000,ENCODE('hello',RAND()));
В настоящее время я поигрался с опцией my.cnf и могу выполнить это за 9,5 секунд ... но есть ли способ сделать это быстрее?
Какие переменные больше подходят для этого запроса? Будет ли более быстрый процессор давать лучшие результаты, нужен ли ему более быстрый диск или ему нужно больше / быстрее ОЗУ?
Я использую постоянный SSD-диск на 50 ГБ, который должен дать мне 1500 операций ввода-вывода в секунду (не самый быстрый, я знаю ... но имеет ли это значение для этого теста?)
Это свежая установка Percona Server для MySQL без каких-либо баз данных.
mysql Ver 14.14 Distrib 5.7.18-15, for debian-linux-gnu (x86_64) using 6.3
Система представляет собой 2 ядра процессора Skylake в Google Cloud с 6 ГБ оперативной памяти.
cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 85
model name : Intel(R) Xeon(R) CPU
stepping : 3
microcode : 0x1
cpu MHz : 2000.064
cache size : 56320 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms rtm avx512f avx512dq rdseed adx clflushopt clwb avx512cd avx512bw avx512vl xsaveopt
bugs :
bogomips : 4000.12
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 85
model name : Intel(R) Xeon(R) CPU
stepping : 3
microcode : 0x1
cpu MHz : 2000.064
cache size : 56320 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms rtm avx512f avx512dq rdseed adx clflushopt clwb avx512cd avx512bw avx512vl xsaveopt
bugs :
bogomips : 4000.12
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:
Это моя текущая конфигурация тестирования:
[mysql]
# CLIENT #
port = 3306
socket = /var/run/mysql/mysql.sock
[mysqld]
# GENERAL #
user = mysql
default-storage-engine = InnoDB
socket = /var/run/mysql/mysql.sock
pid-file = /var/run/mysql/mysql.pid
# MyISAM #
key-buffer-size = 32M
myisam-recover = FORCE,BACKUP
# SAFETY #
max-allowed-packet = 1G
max-connect-errors = 1000000
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY
sysdate-is-now = 1
innodb = FORCE
# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = 0
query-cache-size = 0
max-connections = 128
thread-cache-size = 100
open-files-limit = 65535
table-definition-cache = 4096
table-open-cache = 2000
join-buffer-size = 512K
sort-buffer-size = 512K
# LOGGING #
log-error = /var/log/mysql/mysql-error.log
log-queries-not-using-indexes = 0
slow-query-log = 0
slow-query-log-file = /var/log/mysql/mysql-slow.log
# INNODB #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = 64M
innodb-flush-log-at-trx-commit = 2
innodb-file-per-table = 1
innodb-buffer-pool-size = 512M
# extra
innodb_doublewrite = 0
innodb_log_buffer_size = 64M
Собственно, после тестирования нескольких серверов возникла одна закономерность.
Этот запрос зависит от быстрого процессора, поэтому, когда я использую выделенный экземпляр процессора, а не общие ядра, которые мы видим в облачных сервисах, скорость запроса возрастает.
Следовательно, это связано с ограничением ЦП.