Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Fragmentacja danych - problem z wydajnością
tomerro
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 24.05.2013

Ostrzeżenie: (0%)
-----


Witam,

Mam duży problem z wydajnością bazy danych Mysql InnoDB.

Mam ostatnio duży ruch. I co parę godzin (nawet co 2-3) działanie strony drastycznie zwalnia. Okazuje się że mam fragmentowane wszystkie tabele.
Gdy zauważę to zwolnienie robię OPTIMAZE na wszystkich tabelach i działanie znów jest bardzo szybkie, aż do kolejnego zwolnienia.

Co może być przyczyną fragmentacji?

Podejrzewam że naprawdę bardzo duża liczba UPDATEÓW I INSERTÓW.
Aplikacja często robi UPDATE na tych samym wierszach. Np. mam tabelę POST i tabelę COMMENTS oraz POST_POINTS. Liczbę komentarzy i punktów przechowuję w wierszu tabeli POST tak aby mieć do nich szybki dostęp bez konieczności JOIN i COUNT. Za każdym razem gdy ktoś doda komentarz lub oceni POST muszę robić UPDATE nowej liczby komentarzy i punktów. Czy to może być przyczyna?

Jak zapobiec tej sytuacji?

Robienie co 2-3 godziny OPTIMAZE to zapewne okropnie zły pomysł, bo z tego co czytałem dopisuje dane do ibdata1.
Czytałem to: http://gagor.pl/2011/12/mysql-proste-metody-optymalizacji/
Czy powinienem zrobić kompaktowanie plików, dodać do my.cnf zapis innodb_file_per_table i rozdzielić ibdata1? Czy może problem leży gdzie indziej?
Czytałem że innodb_log_file_size powinien wynosić 25% innodb_buffer_pool_size, ale maksymalnie mogę ustawić 2GB zamiast 10GB (przez 32 bit).
Baza danych stoi na dedykowanym serwerze, przeznaczonym tylko pod bazę danych z 64GB RAM. Mój my.cnf:

  1. key_buffer = 3G
  2. key_buffer_size = 3G
  3. max_allowed_packet = 1M
  4. thread_stack = 192K
  5. thread_concurrency = 32
  6. thread_cache = 8
  7. thread_cache_size = 500
  8. join_buffer_size = 64M
  9. myisam-recover = BACKUP
  10. max_connections = 150
  11. table_open_cache = 4096
  12. table_cache = 2000
  13. query_cache_type = 1
  14. query_cache_limit = 4M
  15. query_cache_size = 1G
  16. sort_buffer_size = 16M
  17. read_buffer_size = 16M
  18. tmp_table_size = 512M
  19. max_heap_table_size = 512M
  20. open_files_limit = 65536
  21. innodb_buffer_pool_size = 40G
  22. innodb_additional_mem_pool_size = 20M
  23. innodb_flush_log_at_trx_commit = 2
  24. innodb_log_file_size = 2000M
  25. innodb_log_buffer_size = 8M
  26. innodb_thread_concurrency = 32
  27. innodb_flush_method = O_DIRECT

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 15:42