- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Доброго времени суток.
Нужнаюсь в подсказке может кто уже с таким сталкивался.
У меня VPS
Virtual CPU 1000Mhz x 2, 4600Mb memory, 20480Mb disk
При оптимизации с помощью mysqltuner
зашел в тупик никак не могу побороть строку
[!!] Temporary tables created on disk: 26% (97 on disk / 365 total)
Чем долmше сервер после ребута тем хуже процент созданных на диске временных таблиц уже все перепробовал...
помогите
То что выдает mysqltuner:
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.77
[OK] Operating on 64-bit architecture
-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 158M (Tables: 896)
[--] Data in InnoDB tables: 592K (Tables: 36)
[!!] Total fragmented tables: 3
-------- Security Recommendations -------------------------------------------
[OK] All database users have passwords assigned
-------- Performance Metrics -------------------------------------------------
[--] Up for: 7m 10s (6K q [14.328 qps], 1K conn, TX: 12M, RX: 1M)
[--] Reads / Writes: 87% / 13%
[--] Total buffers: 2.5G global + 832.0K per thread (100 max threads)
[OK] Maximum possible memory usage: 2.6G (58% of installed RAM)
[OK] Slow queries: 0% (0/6K)
[OK] Highest usage of available connections: 14% (14/100)
[OK] Key buffer size / total MyISAM indexes: 1.0G/42.1M
[OK] Key buffer hit rate: 95.1% (99K cached / 4K reads)
[OK] Query cache efficiency: 37.2% (1K cached / 3K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 2% (25 temp sorts / 963 sorts)
[!!] Temporary tables created on disk: 26% (97 on disk / 365 total)
[OK] Thread cache hit rate: 96% (35 created / 1K connections)
[OK] Table cache hit rate: 99% (950 open / 956 opened)
[OK] Open file limit used: 35% (1K/5K)
[OK] Table locks acquired immediately: 100% (2K immediate / 2K locks)
[OK] InnoDB data size / buffer pool: 592.0K/8.0M
-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Enable the slow query log to troubleshoot bad queries
Temporary table size is already large - reduce result set size
Reduce your SELECT DISTINCT queries without LIMIT clauses
Настройки my.cnf :
[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock
# Here follows entries for some specific programs
# The MySQL server
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
skip-bdb
key_buffer_size = 1024M
max_allowed_packet = 2M
table_cache = 2000
open_files_limit = 4000
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
thread_cache_size = 4
max_heap_table_size = 512M
tmp_table_size = 1024M
innodb_additional_mem_pool_size = 20M
#
# * Query Cache Configuration
#
query_cache_limit = 8M
query_cache_size = 1024M
#skip-networking
server-id = 1
# Uncomment the following if you want to log updates
#log-bin=mysql-bin
# Disable Federated by default
skip-federated
[mysqldump]
quick
max_allowed_packet = 32M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[isamchk]
key_buffer = 8M
sort_buffer_size = 8M
[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M
[mysqlhotcopy]
interactive-timeout
max_heap_table_size = 512M
tmp_table_size = 1024M
эти значения в 99% должны быть одинаковы, попробуйте поставить 1024M и там и там или даже увеличить до 1536M , если свободной памяти много (мускул и так у Вас больше 50% жрет)
key_buffer_size = 1024M
хватит и 128M, у Вас все индексы не больше 50
sort_buffer_size = 64K
попробуйте поднять до 256K
table_cache = 2000
Исходя из тюнера - достаточно и 1000 вполне
или даже
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
все 3 значения поподнимать потихоньку (без лишнего энтузиазма), 256K => 384K => 512K и посмотреть на результат.
Вообще судя по Slow queries: 0% - у Вас не так все плохо, но если проблема есть (а не ради эстетства), то включите слоу_квери_лог и посмотрите какие запросы тормозят, и попробуйте их как раз и оптимизировать. Одними настройками my.cnf не всегда можно решить вопрос полностью.
какой неверный подход к оптимизации СУБД
нужно смотреть запросы и из этого исходить, какие параметры подымать
использовании временных таблиц - это плохой тон!
зашел в тупик никак не могу побороть строку
[!!] Temporary tables created on disk: 26% (97 on disk / 365 total)
Не надо ее бороть. Это особенность исполнения некоторых типов запросов. mysqltuner не может отличить вынужденные создания маленьких файлов на диске и случаи, когда не хватает памяти.
Увеличивай параметр и следи за динамикой изменения показателя. Если перестал улучшаться - дальше смысла нет гнать. Если грубо, то пожалуй на 64мб можно уже остановиться.
Вот перетащить временный каталог /tmp в tmpfs имеет смысл.
использовании временных таблиц - это плохой тон!
использование временных таблиц не дурной тон, а нормальная практика в написании высокороизводительных запросов со сложной логикой
во-первых, временные таблицы сервер постоянно создает сам - если запрос чуть сложнее чем select * from table
во-вторых, использование промежуточных временных таблиц обычно ускоряет выполнение сложных запросов - все-таки компилятор SQL весьма далек от совершенства и зачастую приходится ему помогать, как раз через создание промежуточных временных таблиц
Это симптомы кривого движка, программист которого не утруждал себя оптимизацией запросов к SQL.
Тюнингом ничего не сделать - надо править запросы.
tmp_table_size = 1024M
эти значения в 99% должны быть одинаковы, попробуйте поставить 1024M и там и там или даже увеличить до 1536M
Ни в коем случае не следуйте этому совету, разве что у вас хранилище на десятки САС дисков, огромный кеш на запись и фиброй оно включено прямо в сервер. При работе с такого объема временными файлами у вас просядет сервер по производительности так, что вы не поймете в чем дело. Разбираться в первую очередь с запросами (особенно с select * from...), индексами, джойнами, форинкеями. Поставьте ограничение на количество записей в выборке (max_join_size) и смотрите в ошибки - выясняйте какой запрос убивает базу (возможна рекурсия или неправильное связывание таблиц).