MySQLTuner, joomla 2.5, Joins performed without indexes

M8
На сайте с 18.09.2011
Offline
29
3945

Здравствуйте.

Я не админ. Просто хобби, люблю поковыряться.

Что имеется:

VPS: 1 core, 2 GB RAM, 20 GB SSD (Облако, cat /proc/cpuinfo показывает Intel Xeon E312xx (Sandy Bridge) 3699.986)

ISPmanager-Pro 4.4.10.23

CentOS release 6.6 (Final) x86_64

httpd-2.2.15-39.el6.centos

nginx-1.8.0-1.el6.ngx (прокси)

PHP Version 5.5.24 + Zend OPcache

mysql-server-5.5.43-1.el6.remi

mod_fcgid

Сам сайт, если кому-то интересно: videorip.info

# free -m

total used free shared buffers cached
Mem: 2006 1623 383 204 222 878
-/+ buffers/cache: 522 1483
Swap: 0 0 0


[OK] Currently running supported MySQL version 5.5.43-log
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM
[--] Data in MyISAM tables: 47K (Tables: 26)
[--] Data in InnoDB tables: 25M (Tables: 386)
[--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
[--] Data in MEMORY tables: 0B (Tables: 6)
[!!] Total fragmented tables: 8

-------- Security Recommendations -------------------------------------------
[OK] All database users have passwords assigned

-------- Performance Metrics -------------------------------------------------
[--] Up for: 20h 34m 7s (101K q [1.369 qps], 3K conn, TX: 357M, RX: 35M)
[--] Reads / Writes: 72% / 28%
[--] Total buffers: 416.0M global + 960.0K per thread (100 max threads)
[OK] Maximum possible memory usage: 509.8M (25% of installed RAM)
[OK] Slow queries: 0% (0/101K)
[OK] Highest usage of available connections: 5% (5/100)
[OK] Key buffer size / total MyISAM indexes: 8.0M/2.5M
[OK] Key buffer hit rate: 99.9% (18K cached / 10 reads)
[OK] Query cache efficiency: 57.3% (36K cached / 63K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 10K sorts)
[!!] Joins performed without indexes: 4855
[!!] Temporary tables created on disk: 46% (9K on disk / 19K total)
[OK] Thread cache hit rate: 99% (5 created / 3K connections)
[OK] Table cache hit rate: 48% (518 open / 1K opened)
[OK] Open file limit used: 2% (101/4K)
[OK] Table locks acquired immediately: 100% (67K immediate / 67K locks)
[OK] InnoDB buffer pool / data size: 256.0M/25.5M
[OK] InnoDB log waits: 0
-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Adjust your join queries to always utilize indexes
When making adjustments, make tmp_table_size/max_heap_table_size equal
Reduce your SELECT DISTINCT queries without LIMIT clauses
Variables to adjust:
join_buffer_size (> 256.0K, or always use indexes with joins)
tmp_table_size (> 64M)
max_heap_table_size (> 64M)

Настройки my.cnf: Ссылка

Куча вопросов:

1. Как дефрагментировань таблицы в InnoDB?

2. log-queries-not-using-indexes (когда включен) сыпит запросы в лог (вроде как стандартные от контента Joomla). Код запроса я не перепишу, не умею. Может мемкешед какой установить, поможет? Может есть другие варианты?

3. join_buffer_size - сколько не ставь, просит больше (пробовал даже 64М). Сколько оптимально? (с английским плохо, читал много, ставить выше 4М не рекомендуют вроде)

4. tmp_table_size (> 64M) & max_heap_table_size (> 64M) - устанавливал 256М, просит больше... Зачем? На сервере таблиц всего на 25M. Сколько оптимально?

5. Temporary tables created on disk: 46% - Это нормально?

На заметку, Может кому поможет:
Столкнулся с ошибкой при импорте БД:
#1100 – Table ‘pma_column_info’ was not locked with LOCK TABLES
нагугленное решение не помогало:

Open the phpMyAdmin configuration file config.inc.php and the uncomment the following 2 lines.
$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = 'password';

Ошибка появлялась при импорте под root-ом. Зашел в phpMyAdmin под пользователем - все залилось без ошибок.
K5
На сайте с 21.07.2010
Offline
209
#1

join_buffer_size = 3M

tmp_table_size = 256M

max_heap_table_size = 256M

innodb_buffer_pool_size = 40M

Как дефрагментировань таблицы в InnoDB

phpmyadmin - база - выделить таблицы - внизу выбрать "оптимизация"

аська 45два48499два записки на работе (http://memoryhigh.ru) помогу с сайтом, удалю вирусы, настрою впс -> отзывы ТУТ (/ru/forum/836248) и ТАМ (http://www.maultalk.com/topic140187.html) !!!всегда проверяйте данные людей, которые сами пишут вам в аську или скайп!!!
M8
На сайте с 18.09.2011
Offline
29
#2
kgtu5:

phpmyadmin - база - выделить таблицы - внизу выбрать "оптимизация"

После этого:

[!!] Total fragmented tables: 7

N
На сайте с 06.05.2007
Offline
419
#3
Mihanja80:

4. tmp_table_size (> 64M) & max_heap_table_size (> 64M) - устанавливал 256М, просит больше... Зачем?

Это так неверно закодировано в логике этого скрипта.

В некоторых запросах mysql использует временные файлы не зависимо от размера это переменной. А писатель скрипта этого не знает или намеренно считает слишком редким случаем.

join_buffer_size - сколько не ставь, просит больше (пробовал даже 64М). Сколько оптимально?

Та же история.

Вывод из этого должен быть такой : не использовать скрипт mysqltuner как руководство к непосредственным действиям, но лишь для сбора информации.

Кнопка вызова админа ()
Supsrv
На сайте с 30.11.2012
Offline
19
#4

mysql -e "use db; OPTIMIZE TABLE TRALALA;"

Компания SupSRV. IT- аутсорсинг, IT-консалтинг, системная интеграция. Опыт более 10 лет. Email:esennikova@supsrv.ru Skype: supsrv Tel: +7(932)535-73-73 Site: supsrv.ru (supsrv.ru)
M8
На сайте с 18.09.2011
Offline
29
#5
Supsrv:
mysql -e "use db; OPTIMIZE TABLE TRALALA;"

Как-то страшно запускать такую команду, вот что нашел на хабре:

-е: попытка исправления максимального числа строк в файле данных. Кроме того, эта команда находит «мусорные» строки. Не стоит использовать эту команду, если ситуация не безнадежна;

-е: очень «грубая» проверка. Стоит использовать только в крайнем случае, если в обычном режиме ошибки не обнаруживаются;
Buzz Aldrin
На сайте с 26.12.2014
Offline
21
#6
Mihanja80:
Как-то страшно запускать такую команду, вот что нашел на хабре:

Вы не хабр читайте, а маны

man mysql
--execute=statement, -e statement

Execute the statement and quit. The default output format is like
that produced with --batch. See Section 4.2.4, “Using Options on
the Command Line”, for some examples. With this option, mysql does
not use the history file.
Продам вечную лицензию ispmanager 4.4 Professional за 999 рублей. Обращаться zetronin@gmail.com или в ЛС.
С
На сайте с 14.04.2011
Offline
63
#7

Проще так:

 mysqlcheck --optimize --auto-repair --all-databases
M8
На сайте с 18.09.2011
Offline
29
#8
Сентябрь:
Проще так:
 mysqlcheck --optimize --auto-repair --all-databases

note : Table does not support optimize, doing recreate + analyze instead
status : OK

[!!] Total fragmented tables: 7

 mysqlcheck --optimize  --all-databases -p

Также...

Вычитал что проще сделать бекап, удалить таблицы и залить бекап обратно.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий