Archive

Posts Tagged ‘Performance’

NFS vs. CIFS auf WD MyBook

Das NAS von WD (MyBook) bietet sowohl den Zugriff per NFS wie auch per CIFS (SMB) an. Hier eine Messung der Performance mit bonnie++ von einem Linux-PC aus. Den Test habe ich zuerst auf einem 100Mbit Netz laufen lassen und dann mit einer (1GBit) Direktverbindung zwischen PC und NAS (mitgeliefertes Kabel).
Die CPU-Werte sind der Übersichtlichkeit halber weggelassen. Ich denke die Zahlen sprechen für sich.

Sequential Output Sequential Input Random
Seeks
Sequential Create Random Create
Size:Chunk Size Per Char Block Rewrite Per Char Block Create Read Delete Create Read Delete
K/sec K/sec K/sec K/sec K/sec / sec / sec / sec / sec / sec / sec / sec
NFS 100 Mbit/s 4G 7558 8082 5568 12235 13269 158.5 306 1157 313 320 1473 320
NFS 1 Gbit/s 4G 9618 9777 7588 17214 22120 140.1 331 1621 328 354 1808 355
CIFS 100 Mbit/s 4G 4216 4428 4327 4916 6788 102.5 116 618 218 113 733 229
CIFS 1 Gbit/s 4G 5856 6099 8229 8899 16591 107.5 118 662 228 123 820 250
Kategorien:Deutsch Schlagwörter:

MySQL durch Indexe beschleunigen

Ein Kunde hatte erhebliche Probleme mit der Performance seiner Webanwendung. Die Vermutung war dass es an der MySQL Datenbank liegt, was ein Blick in die Prozessliste auch bestätigte.

Um herrauszufinden welche SQL-Anfragen lange dauern empfiehlt es sich „log_slow_queries“ bei MySQL zu aktivieren. In der entsprechenden Log-Datei sieht man dann einige Analysen zu den langsamen Querys. Die „schuldigen“ Anfragen in diesem Fall dauerten bis zu 1min (2×3,2GHz CPU) und überprüften über 39000 Zeilen über verschiedene Tabellen.
Die Lösung brachten Indexe auf die häufig verwendete Spalten in den WHERE und ORDER Klauseln. Die Geschwindigkeit verbesserte sich dadurch um den Faktor 50.

Um zu sehen welche Indexe verwendet werden kann man vor einen SQL Statement ein „EXPLAIN“ setzen.

mysql> explain select * from jos_facileforms_subrecords WHERE id=80;
+----+-------------+----------------------------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table                      | type  | possible_keys | key     | key_len | ref   | rows | Extra |
+----+-------------+----------------------------+-------+---------------+---------+---------+-------+------+-------+
|  1 | SIMPLE      | jos_facileforms_subrecords | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
+----+-------------+----------------------------+-------+---------------+---------+---------+-------+------+-------+

„id“ ist PRIMARY KEY und deswegen auch automatische in Index.

mysql> explain select * from jos_facileforms_subrecords WHERE record=80;
+----+-------------+----------------------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table                      | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+----------------------------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | jos_facileforms_subrecords | ALL  | NULL          | NULL | NULL    | NULL | 2353 | Using where |
+----+-------------+----------------------------+------+---------------+------+---------+------+------+-------------+

„record“ ist kein Index. Das ändern wir mit:

mysql> ALTER TABLE `jos_facileforms_subrecords` ADD INDEX ( `record` );

Der nächste Aufruf zeigt uns dass ein index verwendet wird:

mysql> explain select * from jos_facileforms_subrecords WHERE record=80;
+----+-------------+----------------------------+------+---------------+--------+---------+-------+------+-------+
| id | select_type | table                      | type | possible_keys | key    | key_len | ref   | rows | Extra |
+----+-------------+----------------------------+------+---------------+--------+---------+-------+------+-------+
|  1 | SIMPLE      | jos_facileforms_subrecords | ref  | record        | record | 4       | const |    7 |       |
+----+-------------+----------------------------+------+---------------+--------+---------+-------+------+-------+

sehr gute weiterführende Infos gibt es z.B. hier:  Optimierung von MySQL-Abfragen: Verwendung des Index

Kategorien:Deutsch Schlagwörter: , ,
%d Bloggern gefällt das: