Schönen Tag.
Ich weiß, dass dies ein Duplikat anderer Fragen sein kann, aber ich habe alle Vorschläge in vielen Threads angewendet, aber ich bleibe bei demselben Problem.
Ich habe eine einzelne gespeicherte Prozedur, die mit max 3 tables
. Wenn ich die Prozedur ausführe, wird nur 30% of my CPU
verwendet und ungefähr 25% of RAM
.
Ich sitze mit einem CPU with 4 cores and 16GB RAM
.
my.ini sieht wie folgt aus:
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 512M
max_allowed_packet = 32M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 128M
thread_cache_size = 16
query_cache_size= 32M
thread_concurrency = 0
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
innodb_buffer_pool_size = 12G
innodb_log_buffer_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_read_io_threads = 64
innodb_write_io_threads = 64
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
Ist es die Art der aufgerufenen Prozedur, die dazu führt, dass MySQL die Hardware nicht ausnutzt, oder ist es meine Konfiguration?
Ich lief XAMPP
, merkte dann aber, dass es 32-Bit war, also wechselte ich zur 64-Bit-Version von WAMP
. Ich verwende ein 32-Bit MySQLWorkbench
, um Abfragen auszuführen.
Ich benutze die InnoDB engine
.
Verwenden von MySQL Ver 14.14 Distrib 5.5.24 Win64 (x86)
.
quelle
SELECT VERSION();
)Antworten:
Die Autoren von High Performance MySQL beschreiben einen Teil Ihres Problems ziemlich kurz (S. 234):
Wenn Sie eine einzelne gespeicherte Prozedur ausführen, wird nicht mehr als einer Ihrer CPU-Kerne zum Ausführen von Abfragen verwendet. Bei anderen Kernen, die von verschiedenen Hintergrund- und Arbeitsthreads verwendet werden, z. B. solchen, die E / A ausführen, wird ein wenig mehr verwendet. MySQL wird nur dann wirklich die volle Leistung eines Multi-Core- oder Multi-Prozessor-Systems nutzen, wenn mehrere Abfragen gleichzeitig ausgeführt werden.
Wenn 30% von 1 Kern verwendet werden, weist dies auf ein potenzielles Problem hin, aber 1,2 von 4 Kernen für eine einzelne Abfrage sind ganz normal.
quelle
Trotz all der Änderungen, die Sie vorgenommen haben
my.ini
, möchte ich nur noch eine vorschlagen:Ich habe festgestellt, dass Sie innodb_buffer_pool_instances nicht festgelegt haben .
Laut der MySQL-Dokumentation ist dies für innodb_buffer_pool_instances gedacht :
Der Standardwert ist 1. Da Sie 4 Kerne haben, würde ich ihn auf 4 setzen. Bitte fügen Sie diese Variable hinzu zu
my.ini
:Da dies keine dynamische Variable ist, müssen Sie mysql wie folgt neu starten
Versuche es !!!
UPDATE 2013-05-24 12:16 EDT
Wenn
my.ini
ich noch einmal auf Ihre schaue , habe ich einige weitere Empfehlungen in Bezug auf die Speichernutzung:ib_logfile0
undib_logfile1
.innodb_fast_shutdown=0
zumy.ini
. Dadurch werden alle nicht festgeschriebenen Transaktionen vollständig von ibdata1, ib_logfile0 und ib_logfile1 gelöscht, wenn Sie mysqld herunterfahren. Dies führt zu einem kürzeren InnoDB-Crash-Wiederherstellungszyklus beim Start.ibdata1
. Sie können die Festplatten-E / A für InnoDB verteilen, indem Sie InnoDB-Tabellen von ibdata1 trennen. Siehe meinen StackOverflow-Beitrag. Gewusst wie: Bereinigen einer MySQL-InnoDB-Speicher-Engine? wie dies zu tun und vollständig zu defragmentierenibdata1
.quelle
The InnoDB memory heap is disabled
InnoDB: Not using CPU crc32 instructions
InnoDB: Initializing buffer pool, size = 12.0G