2011-10-25 12 views
5

Zasadniczo jesteśmy bardzo zadowoleni z wydajności MySQL, podobne zapytania są realizowane w ułamku sekundy. Teraz mamy problem z tym zapytaniem. Brakujący indeks jest prawdopodobnie najczęstszą przyczyną takich problemów. Tak więc poprzedzałem zapytanie przez EXPLAIN i otrzymałem ten plan zapytania, który pokazuje, że używane są tylko indeksy bez sekwencyjnych skanów.Co może zmniejszyć wydajność MySqls?

Tabele dmr i dma mają po 3 miliony wierszy, dc ma 6000 wierszy.

+----+-------------+-------+--------+-------------------------------+----------------+---------+--------------------+------+-------------+ 
| id | select_type | table | type | possible_keys     | key   | key_len | ref    | rows | Extra  | 
+----+-------------+-------+--------+-------------------------------+----------------+---------+--------------------+------+-------------+ 
| 1 | SIMPLE  | dmr | ref | FKC33D5199F17E1825,ix_art_ref | ix_art_ref  | 5  | const    | 5021 | Using where | 
| 1 | SIMPLE  | dma | eq_ref | PRIMARY,FK8C6E1445153BBDC9 | PRIMARY  | 8  | dev.dmr.dml_id  | 1 |    | 
| 1 | SIMPLE  | dc | eq_ref | PRIMARY      | PRIMARY  | 8  | dev.dma.dc_id  | 1 | Using index | 
+----+-------------+-------+--------+-------------------------------+----------------+---------+--------------------+------+-------------+ 

Co może powodować te problemy?

Wersja MySql ma 5.5, używając InnoDB jako silnika. (Tylko domyślne parametry w oknach).

EDIT

Kiedy usunąć gdzie klauzula, mysql zwraca (ogromne) zestaw wyników natychmiast. planu kwerend w tym przypadku wygląda następująco:

+----+-------------+-------+-------+----------------------------+--------------------+---------+------------+------+--------------------------+ 
| id | select_type | table | type | possible_keys    | key    | key_len | ref  | rows | Extra     | 
+----+-------------+-------+-------+----------------------------+--------------------+---------+------------+------+--------------------------+ 
| 1 | SIMPLE  | dc | index | PRIMARY     | FKAEB144C64FA71464 | 9  | NULL  | 4037 | Using index    | 
| 1 | SIMPLE  | dma | ref | PRIMARY,FK8C6E1445153BBDC9 | FK8C6E1445153BBDC9 | 9  | dev.dc.id | 263 | Using where; Using index | 
| 1 | SIMPLE  | dmr | ref | FKC33D5199F17E1825   | FKC33D5199F17E1825 | 9  | dev.dma.id | 1 | Using where    | 
+----+-------------+-------+-------+----------------------------+--------------------+---------+------------+------+--------------------------+ 
+0

You najprawdopodobniej I/O związany przez dysk twardy. Zwiększ zmienną rozmiar 'innodb_buffer_pool' do 70% twojej pamięci RAM. W ten sposób część działającego zbioru danych będzie przechowywana w pamięci i wyszukiwanie będzie znacznie szybsze. –

+0

spróbuj przeanalizować tabelę ... http: //dev.mysql.com/doc/refman/5.0/en/analyze-table.html –

+0

@Neville - już zrobiłem, mówi, że status jest w porządku. – stacker

Odpowiedz

0

Rozwiązałem problem przez ponowne zainstalowanie mysql 5.5.17 i postanowiłem nie używać ustawienia "Developer Machine", użyłem ustawień domyślnych dla 'Server Machine'. Po tym, jak zapytanie zostanie wykonane w ciągu kilku sekund (pierwszy raz), kolejne zapytanie wykonuje się znacznie lepiej niż .

Przypuszczam, że w trybie programisty mysql jest skonfigurowany do zapisywania RAM i nie buforuje wystarczającej liczby stron indeksu dla dużych tabel.

(Re-) konfiguracja może z dokonanym przez MYSQL_HOME/bin/MySQLInstanceConfig

enter image description here

Porównanie starych i nowych plików konfiguracyjnych pokazuje, że wartości te zostały zmienione w trakcie konfiguracji:

tmp_table_size=103M old 18M 
myisam_sort_buffer_size=205M old 35M 
key_buffer_size=175M old 25M 
innodb_additional_mem_pool_size=7M old 3499K 
innodb_additional_mem_pool_size=2M old 1M 
innodb_buffer_pool_size=339M old 47M 
+0

Jak zasugerowano w komentarzu, Twój 'innodb_buffer_pool' został zwiększony. Możesz to zrobić ręcznie, edytując plik my.cnf lub ponownie konfigurując instancję przez ten GUI. Tak czy inaczej, twój działający zestaw danych znajduje się teraz w pamięci. Innymi słowy - nadal może być powolny od czasu do czasu. –

+0

@ N.B. Przykro mi, ale nie zrozumiałem, co masz na myśli przez "działający zbiór danych". Teraz wszystko jest jasne, jeśli zamieścisz swój komentarz jako odpowiedź, zaakceptuję to. Dzięki za pomoc. – stacker

+0

Wszystko w porządku, nie "poluję" na przedstawiciela, twoja odpowiedź i komentarze sprawią, że sprawy będą oczywiste dla następnego faceta z tym samym problemem :) –

1

Może stoliki są bardzo fragmentaryczne i MySQL musi iść na całym dysku, aby sprowadzić te 5021 wierszy?

Powiązane problemy