2012-04-01 26 views
9

Właśnie przeprowadziłem migrację do mysql 5.5.20 i miałem problem z wydajnością z tabelami tymczasowymi. Mam procedurę przechowywaną, która tworzy osiem z nich, podobnie jak to:Innodb i tymczasowe tabele

create temporary table t_opened_today 
(
    portfolio_id  integer, 
    position_type_id tinyint, 
    open_value   decimal(12,2), 
    today_net   decimal(12,2) 
); 

Na Mysql 5.5 posiada silnik InnoDB jako domyślny przechowywania. Kiedyś byłem na 5.1, a tak nie było. więc tworzył tabele tymczasowe z Innodb. Zweryfikowałem to, patrząc na/tmp i nie widziałem żadnych .MYI lub .MYD. Zajmowało to 0,50 sekundy (lub, co więcej, czas wykonania podskakiwał w każdym miejscu), co jest niedorzeczne.

więc zmodyfikowałem definicję tabeli tak, aby zawierała "Engine = MyISAM" i zajęło 0,00 sekundy (jak można się było spodziewać), aby nic nie robić, ale utworzyło 8 tabel tymczasowych i zakończyło działanie.

Ktoś ma pojęcie, dlaczego w Innodb potrzeba tak dużo czasu, aby utworzyć tabele tymczasowe? Być może tworzenie tabel tymczasowych za pomocą domyślnego silnika pamięci masowej jest czymś w rodzaju ogromnego nie-nie?

Nic nie zrobiłem dla my.cnf, ponieważ jestem po prostu uruchomiony. Zrobiłem ustawić zwiększyć dzienniki z domyślnego .. ale to wszystko. Tak więc konfiguracja jest gotowa.

dziękuję!

Odpowiedz

2

Jeśli korzystasz z domyślnej konfiguracji, mysql użyje pojedynczego obszaru tabel dla wszystkich tabel innodb, co prawdopodobnie powoduje powolne tworzenie tabel tymczasowych. Proponuję użyć silnika pamięci MEMORY (HEAP) do tabel tymczasowych, jeśli masz wystarczająco dużo pamięci.

+1

thx, choć nadal wydaje się dziwne, że tworzenie tabel tymczasowych z silnikiem Innodb trwa tak długo! –

Powiązane problemy