bituniverse.com Foren-Übersicht bituniverse.com
Entwickler Forum
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Performance optimieren

 
Neues Thema eröffnen   Neue Antwort erstellen    bituniverse.com Foren-Übersicht -> Datenbanken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
M



Anmeldedatum: 05.11.2007
Beiträge: 107
Wohnort: Aachen

BeitragVerfasst am: Mo 23 März, 2009 00:09    Titel: Performance optimieren Antworten mit Zitat

Hi,

ich habe einen Server, auf dem eine recht Speicherintensive Anwendun läuft. Diese verwendet zur Datenspeicherung eine MySQL Datenbank mit rund 150 Tabellen. Die Größe der gesamten Datenbank ist zur Zeit ca. 50 MB und ich habe im Schnitt ca. 6 Datenbankabfragen pro Sekunde. Dabei halten sich lesende und schreibende Querys in etwa die Waage.

Nun kommt es besonders nach längerer Laufzeit immer mal wieder zu Performance Problemen und ich habe da auch die Datenbank als (Mit)Ursache in Verdacht. Da ich aber vom MySQL Server an sich nicht wirklich viel Ahnung habe, dachte ich mir ich frag mal euch, ob ihr ein paar Einstellungen empfehlen könnt oder Literatur kennt, die sich hiermit näher beschäftigt und die man zu Rate ziehen könnte.

Das ganze läuft unter Windows Web Server 2008 ( Rolling Eyes ) auf einem Dual Core AMD Opteron 2,2 GHz mit 4 GB RAM

Die my.ini sieht aktuell wie folgt aus

Code:
  1. default-storage-engine=INNODB
  2. max_connections=600
  3. query_cache_size=0
  4. table_cache=256
  5. tmp_table_size=256M
  6. thread_cache_size=64
  7. myisam_max_sort_file_size=100G
  8. myisam_sort_buffer_size=68M
  9. key_buffer_size=55M
  10. read_buffer_size=64K
  11. read_rnd_buffer_size=256K
  12. sort_buffer_size=512K
  13. innodb_additional_mem_pool_size=8M
  14. innodb_flush_log_at_trx_commit=2
  15. innodb_log_buffer_size=16M
  16. innodb_buffer_pool_size=1.5G
  17. innodb_log_file_size=512M
  18. innodb_thread_concurrency=4
  19. memlock
  20. innodb_file_per_table

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Gast






BeitragVerfasst am: Mi 15 Apr, 2009 08:53    Titel: Antworten mit Zitat

query_cache_size=0
damit hast du cache abgeschaltet, der bei manchen abfragen 238% performance bringen bzw auch klauen kann : (sieh dev.mysql.com) .
am bestens schau dir das: dev.mysql.com
In jedem Fall ist Optimierung ein Wissenschaft für sich. Es muss richtig nachgeforscht werden, welche querys die System belasten und entsprechend Speichergrösse bei Bufer bzw. Cache anzupassen.
Wir haben für diese Zwecke extra einen Spezialisten von MySql für 2 Tage eingeladen, um die optimale Einstellungen bei unserem Server einzustellen.
Wir haben eigentlich Solaris mit 32G Arbeitsspeicher und max_connections ist bei uns auf 250 begrenzt.

Nach oben
M



Anmeldedatum: 05.11.2007
Beiträge: 107
Wohnort: Aachen

BeitragVerfasst am: Fr 17 Apr, 2009 20:25    Titel: Antworten mit Zitat

Ich habe mich in der Zwischenzeit noch einwenig eingelesen, aber wie du ja auch schon gesagt hast ist das ein extrem komplexes Thema :/

Also meine aktuelle Config ist nun diese

Code:
  1. [mysqld_safe]
  2. open-files-limit=4096
  3.  
  4. [mysqld]
  5.  
  6. default-storage-engine=INNODB
  7. max_connections=90
  8. query_cache_size=64M
  9. query_cache_type=1
  10. table_cache=700
  11. tmp_table_size=1024M
  12. max_heap_table_size=1024M
  13. thread_cache_size=64M
  14. myisam_max_sort_file_size=100G
  15. myisam_sort_buffer_size=1M
  16. key_buffer_size=128M
  17. read_buffer_size=64K
  18. read_rnd_buffer_size=256K
  19. sort_buffer_size=1M
  20. innodb_additional_mem_pool_size=8M
  21. innodb_flush_log_at_trx_commit=0
  22. innodb_log_buffer_size=16M
  23. innodb_buffer_pool_size=2000M
  24. innodb_log_file_size=512M
  25. innodb_thread_concurrency=4
  26. memlock
  27. innodb_file_per_table

Nach 14 Tagen Uptime und rund 4 millionen Abfragen wurden mir diese Werte als besorgniserregend angezeigt:

Code:
  1. Innodb_buffer_pool_pages_dirty = 21
  2. Innodb_buffer_pool_reads = 2591
  3. Innodb_row_lock_waits = 53
  4. Handler_read_rnd = 244000
  5. Handler_read_rnd_next = 202000000
  6. Qcache_lowmem_prunes = 20000
  7. Created_tmp_disk_tables = 36000
  8. Created_tmp_disk_tables = 36000
  9. Sort_merge_passes = 5
  10. Opened_tables = 25000
  11. Table_locks_waited = 10

Was sind denn schmutzige Seiten? Laughing
Und was sagt mir Qcache_lowmem_prunes ? Ist mein Cache nun zu klein, oder die Fragmentierung zu groß? Qcache_free_blocks ist 3737, Qcache_queries_in_cache ist 44000 und Qcache_total_blocks ist 93000.
Ich hab ihn jetzt erstmal erhöht.

Das Verhältnis von Qcache_hits / Qcache_inserts ist recht hoch (~4300), das heißt doch, dass recht viele Abfragen aus dem Speicher bedient werden konnten und es sich demnach empfiehlt den Cache aktiviert zu lassen, oder?

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
M



Anmeldedatum: 05.11.2007
Beiträge: 107
Wohnort: Aachen

BeitragVerfasst am: Di 16 Jun, 2009 17:22    Titel: Antworten mit Zitat

Gibt es eigentlich eine Möglichkeit Querys zu loggen, für die die Tabellen nicht ausreichend indiziert sind? Oder kann ich dazu das Slow Query log irgendwie missbrauchen?

Argh, schon gefunden Smile

dev.mysql.com

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    bituniverse.com Foren-Übersicht -> Datenbanken Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB2.de
Powered by WebRing.