MySQL tmp_table_size
4 отговора
1245 прегледа
MySQL tmp_table_size
Здравейте,
Опитвам се да оптимизирам mysql така че възможно по-малко temporary таблици да се създават на диска, като вместо това се ползва рам-а.
В my.cnf увеличих от 32М на 50М това:
tmp_table_size = 50М
после го промених на 130М но никакъв ефект нямаше. като пусна mysqladmin variables си излиза че tmp_table_size е наистина 130М, обаче след 2 часа работа на сървъра:
Created_tmp_disk_tables | 352
Created_tmp_tables | 871
т.е половината се записват на диска... Странното е че най-голямата база данни цялата е 40 МБ и не ми е ясно каква тази темп таблица дето да не се побере в 130 МБ.
Единственото което намерих като възможно обяснение е, че когато в темп таблицата която се създава има поле от тип blob, тя се създава само на диска. дали това е причината?
Опитвам се да оптимизирам mysql така че възможно по-малко temporary таблици да се създават на диска, като вместо това се ползва рам-а.
В my.cnf увеличих от 32М на 50М това:
tmp_table_size = 50М
после го промених на 130М но никакъв ефект нямаше. като пусна mysqladmin variables си излиза че tmp_table_size е наистина 130М, обаче след 2 часа работа на сървъра:
Created_tmp_disk_tables | 352
Created_tmp_tables | 871
т.е половината се записват на диска... Странното е че най-голямата база данни цялата е 40 МБ и не ми е ясно каква тази темп таблица дето да не се побере в 130 МБ.
Единственото което намерих като възможно обяснение е, че когато в темп таблицата която се създава има поле от тип blob, тя се създава само на диска. дали това е причината?
Re: MySQL tmp_table_size
Обяснението за размера на временните таблици е, че ти винего си създават с CHAR колонки вместо VARCHAR и оттам могат да се окажат доста по-големи от очакваното.
Вместо да увеличаваш tmp_table_size можеш да я намалиш и да сложиш tmpdir на файлова система в RAM. Примерно tmpfs
salle.online.bg/sig
Вместо да увеличаваш tmp_table_size можеш да я намалиш и да сложиш tmpdir на файлова система в RAM. Примерно tmpfs
salle.online.bg/sig
Re: MySQL tmp_table_size
Ясно, мерси :)
Това да сложа tmpdir в рама не носи ли опасност да се изхаби целия рам в някой по-натоварен момент. Примерно при някой голям dump. Кото се има предвид че и всичко ще отива там - всички темп таблици, независимо колко са големи, големите сортове и джойнове... Ако правилно разбирам tmpfs ще залъгва mysql че си пише по диска а то ще е в рама. и така значи всички операции на mysql да се качат в рама?
Предполагам че това би бил оптималния вариянт за performance, обаче рама е само 1ГБ, а сървъра не е дедикейтед само за mysql а също върви апаче, ексим и т.н.
Това да сложа tmpdir в рама не носи ли опасност да се изхаби целия рам в някой по-натоварен момент. Примерно при някой голям dump. Кото се има предвид че и всичко ще отива там - всички темп таблици, независимо колко са големи, големите сортове и джойнове... Ако правилно разбирам tmpfs ще залъгва mysql че си пише по диска а то ще е в рама. и така значи всички операции на mysql да се качат в рама?
Предполагам че това би бил оптималния вариянт за performance, обаче рама е само 1ГБ, а сървъра не е дедикейтед само за mysql а също върви апаче, ексим и т.н.
Re: Ами нали знаеш ..
Той отговорът винаги е един:
- Зависи!
Помисли за следното.
Паметта в момента е много евтина. От друга страна на 32-битов процесор всеки процес е ограничен до 2-3 GB (зависи от конкретната ОС, ядро, библиотеки)
Та това с tmpfs е начин да заобиколиш донякъде въпросното ограничение.
Не забравяй, че tmp_table_size е валидно за всяка сесия. Ако имаш 20 едновременни заявки които се опитват да захапят по 120MB RAM всяка определено имаш проблем.
salle.online.bg/sig
- Зависи!
Помисли за следното.
Паметта в момента е много евтина. От друга страна на 32-битов процесор всеки процес е ограничен до 2-3 GB (зависи от конкретната ОС, ядро, библиотеки)
Та това с tmpfs е начин да заобиколиш донякъде въпросното ограничение.
Не забравяй, че tmp_table_size е валидно за всяка сесия. Ако имаш 20 едновременни заявки които се опитват да захапят по 120MB RAM всяка определено имаш проблем.
salle.online.bg/sig
Благодаря! :)
Мерси много за информацията. Ще видя какво може да се направи по хардуера, но както бях чел някъде за mysql:
с оптимизиране на сървъра може да се увеличи производителността до 10 пъти, но с оптимизиране на заявките и структурата на базата данни, може да се подобри и 1000 пъти :) Но все пак исках да знам че от my.cnf съм изстискал каквото може де.
с оптимизиране на сървъра може да се увеличи производителността до 10 пъти, но с оптимизиране на заявките и структурата на базата данни, може да се подобри и 1000 пъти :) Но все пак исках да знам че от my.cnf съм изстискал каквото може де.