Frage

Wir haben kürzlich einen unserer Tabellen auf InnoDB umgestellt und jetzt haben wir sehr langsame Update -Ausführungszeiten. Ein Update, das früher 0.010-0.030 Sekunden dauerte, kann jetzt über 70 Sekunden dauern. Einige Abfragen werden fallen gelassen, weil sie innerhalb des Standardlimits von 50 Sekunden keine Schloss erwerben können (mir ist klar, dass wir diese Grenze erhöhen können).

Die fragliche Tabelle hat nur einen Index, den Primärschlüssel selbst, der ein Medium -Wert ist. Die Tabelle hat ungefähr 1 Million Zeilen. Alle Update in diesem Zusammenhang beinhalten eine einzige Zeile. Normalerweise sind in jeder Abfrage 4-5 Spalten aus dieser Zeile betroffen.

Der aktuelle my.cnf ist unten eingefügt. Sehen Sie etwas, das für InnoDB eine schlechte Update -Leistung verursachen könnte?

[mysqld]
set-variable=local-infile=0

datadir=/db/mysql/data
socket=/var/lib/mysql/mysql.sock
#log = /var/log/mysqld.log
log-error = /var/log/mysqld.error.log
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1


skip-locking
key_buffer = 1G
query_cache_size = 256M
thread_cache_size = 128
table_cache = 2048
max_connections = 400
query_cache_limit = 1024M
log_slow_queries = /var/log/mysql-slow.log
long_query_time = 1
skip-bdb
skip-locking
skip-name-resolve

innodb_buffer_pool_size=1G
innodb_additional_mem_pool_size=20M
innodb_flush_log_at_trx_commit=2
#innodb_log_file_size=250M
innodb_log_buffer_size=8M
innodb_lock_wait_timeout=50


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

AKTUALISIEREN:
INNODB_LOG_FILE_SIZE: 5242880
Have_innodb: Ja
"Wo" -Klausel sieht immer nur nach einer Spalte aus, was der Hauptschlüssel ist.

Update - 26. Juli 2012:
Wir haben unsere Datenbank auf MySQL 5.5 aktualisiert. Jetzt sind InnoDB -Updates ziemlich schnell, weniger als 0,010 Sekunden in unserem speziellen Fall. Und Varianz ist ziemlich niedrig. Ich nehme daraus: InnoDB sollte auf MySQL 5.0 mit echtem Vorsicht verwendet werden.

War es hilfreich?

Lösung

Perspektive Nr. 1

Wenn Sie nur in InnoDB nach dem Primärschlüssel aktualisieren, gibt es einen seltenen, aber möglichen Anlass, wenn der Clustered -Index (auch bekannt als AKA Gen_clust_index) kann verschlossen werden.

Ich habe einmal drei Beiträge von beantwortet eine Person zu diesem Thema

Bitte lesen Sie diese sorgfältig durch. Das Poster dieser Frage fand seine eigene Problemumgehung basierend auf dem Verhalten des Sehen in InnoDB Clustered Index. Leider hat er nicht gepostet, was die Problemumgehung war.

Wenn Sie sehen, dass die Abfragen langsam laufen, melden Sie sich in MySQL an und laufen Sie aus SHOW ENGINE INNODB STATUS\G und Beginn der Suche nach Schlössern im Cluster -Index.

Perspektive Nr. 2

Ich sehe, dass Sie sich kommentiert haben innodb_log_file_size. Sie haben es bei 5 MB, die Standardeinstellung. Seit innodb_buffer_pool_size ist auf 1G eingestellt, innoDB_log_file_size muss bei 256 m liegen. Klicken Sie hier, um die Einstellung von innodb_log_file_size auf 256m zu setzen.

Perspektive Nr. 3

Ich sehe, Sie verwenden nicht innodb_file_per_table. Möglicherweise möchten Sie es verwenden, um Tabellenaktualisierungen speziell für die eine Tabelle mit einer Million Zeilen erfolgen zu lassen. Klicken Sie hier, um zu sehen, wie Sie die InnoDB -Infrastruktur bereinigen, um innodb_file_per_table zu verwenden.

Andere Tipps

  1. Aktualisieren Sie den Wert des Primärschlüsselwerts?

  2. Sind eine der Spalten Fremdschlüssel zu anderen Tischen? Da InnoDB auch ausländische Schlüssel in derselben Transaktion über die Kaskade aktualisiert.

  3. Können Sie die InnoDB_Buffer_pool_size auf mehr als 1 GB erhöhen, damit die gesamte Tabelle in den Speicher passen kann?

  4. Wie viele andere Tabellen befinden sich in der Schmea - da es möglicherweise Probleme gibt, die die Größe des Tablespace für die Durchführung des Updates zu

  5. Möglicherweise möchten Sie versuchen, die innodb_file_per_table zu verwenden, wobei für jede Tabelle eine Tablespace -Datei erstellt wird. Sobald Sie diesen Parameter geändert haben, müssen Sie Ihren Server neu starten und dann Ihre Datenbank neu erstellen, damit er wirksam wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top