на диске стабильно больше 40% (Created_tmp_disk_tables / (Created_tmp_tables + Created_tmp_disk_tables)) 
                  
                  
                  tmp_table_size = max_heap_table_size =  256 МБ
                  
                  
                  
                  
                  
                  Есть два противоречивых мнения:
                  
                  
                  1. Увеличивать показатели и надеяться что базе данных хватит оперативы на все.
                  
                  
                  2. Уменьшать показатели, перенести tmpdir в оперативную память (и если упадет, то упадет только конкретный запрос) 
                  
                  
                  
                  
                  
                  
                  
                  
                  Менять запросы не вариант - почти все они генерируются проприетарным ПО по каким-то внутренним правилам.
                  
                  
                  
                  
                  
                  Вопрос: какой из двух вариантов выбрать и есть ли третий?
                  
                  
                
А СУБД какая ?
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  MySQL 5.7.37-40
что такое тогда "перенести tmpdir в оперативную память " ?
1. Увеличивать показатели /2. Уменьшать показатели, — тоже как бы не ясно
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Создать виртуальный диск на linux (tmpfs), примонтировать его в какую-нибудь директорию и изменить конфигурацию MySQL (tmpdir) чтобы он создавал временные таблицы в этой директории (которая де-факто находится не на диске, а в памяти).
с чего она будет в памяти-то ?
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Сейчас tmp_table_size = 256МБ, ее можно увеличить до 512 например.
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Потому что сам раздел будет не физическим, а в оперативной памяти
В любом случае лучше поставить SSD
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Уже - Samsung EVO 960
Ну так и успокойся с памятью тогда, память лучше под кэш БД отдать. innodb buffer pool
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Ваше мнение услышал. Большое спасибо. Подожду еще альтернатив (если будут).
Временные таблицы же на SSD у тебя сконфигурены ?
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Да. Там все на SSD - и база и временные таблицы и ось
OS бы обошлась...
А третий вариант - индексы создавать надо. Это полезнее всех этих прыжков
А проблема-то сейчас в чём? Ну спиллятся времянки на диск, чуть медленнее запросы работают, но работают. А от манипуляций с tmpfs будешь регулярно получать очень быстрые краши вместо медленных результатов)
Я тоже не понял какой показатель вы хотите там увеличивать или уменьшать
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  У клиента "тормозит" ПО и он хочет "ускориться". Примерно 40% от скорости занимает время выполнение запросов (запросы не легкие с join'ами и кучей where). Одна из рабочих гипотез - что создание этих временных таблиц дает тормоза. "Специалисты" заказчика тыкают пальцами на этот процент и хотят чтобы его уменьшили (то бишь увеличили параметры), уверяя что это как-то увеличит производительность. Некоторые сисадмины (наши) уверяют что показатель наоборот надо уменьшать и переносить в оперативную память. Я не спец в этом и не считаю что это как-то сделает погоду, но если вдруг у кого-то есть какие-либо аргументы за/против - мне бы хотелось разобраться.
Ну то есть вам нужен нормальный mysql DBA, но нанять его нет денег
Так какой показатель ты хочешь менять?
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Если бы была какая-то ежедневная/ежемесячная ситуация - думаю так и поступили бы, но вот такой вот "разовый" прыжок во мнениях произошел. Я бы и сам нырнул куда-нибудь да почитал, вот только в доках про mysql не пишут про трюки с tmpfs.
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  tmp_table_size И max_heap_table_size - там же написано (вроде как по докам лучше чтобы они были одинаковые).
Ну это можно сделать ЕСЛИ хватает оперативной памяти для самой базы данных, для её кэша
Зависит от того, сколько сессий параллельно работает (может у вас там 200 бухгалтеров разом тяжёлые отчёты грузят) и сколько едят эти запросы (может там спиллы на десяток гигов) Выкручивание tmp_table_size, скорее всего, даст очень ограниченный эффект Перенос на tmpfs - дорогая затея, не самый эффективный способ использования RAM. Ну и риски OOM повышаются резко - понравится ли это клиенту больше, чем тормоза? Лучше просто планок RAM закупить тогда уж. Начинать надо бы с редизайна схем, докручивания индексов, статистики по таблицам, партиционирования, а потом уже за конфигурацию кластера браться
Не надо всякий tmpfs, Если у тебя есть SSD, то это как бы его заменяет
Последний абзац ему недоступен он об этом сразу сказал
Параметр Max Hip Table size тебе трогать не нужно, это не про это, это про максимальный размер таблиц для Engine Memory которые создаются пользователем, то есть явно кодом SQL. Я подозреваю что у тебя-то таких таблиц нет вообще. Но с другой стороны если ты его увеличишь и таких таблиц всё равно нет то ничего страшного тоже не будет
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Насколько я понял она играет роль для запросов ALTER TABLE на других таблицах - а такие запросы бывают (но очень редко).
Скорее всего это ты что-то не так понял
 Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nikolaev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Не отрицаю :)
Обсуждают сегодня