SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.01.2014 12:52:45

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Использую одну из CMS - вопрос про InnoDB и MyISAM

Добрый день.

Использую одну из популярных CMS.
В ней условно можно разделить все таблицы на два типа:
1. для контента MyISAM
2. для кэша InnoDB

Вопрос в следующем.
Раньше у меня не было поддержки на хостинге InnoDB - и соответственно таблицы для кэша были MyISAM.
Сайт работал быстро (скорость показа не закэшированной страницы, и скорость показа закэшированной страницы).

Сейчас появилась поддержа InnoDB.
И соответственно таблицы для кэша перевелись на нее.

И сайт стал работать заметно медленнее (на секунды...! - даже бы сказал, что было 1 секунда, а стало и бывало - 7-40 секунд).
По умолчанию в данной CMS - таблицы для кэша ставяться как InnoDB.

Если с ним (InnoDB) - сайт работает медленнее - зачем он этот InnoDB - нужен и стоит ли мне его оставлять?

Спасибо.

Отредактированно Slorvengo (15.01.2014 13:06:37)

Неактивен

 

#2 15.01.2014 13:59:40

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

В принципе преимущества InnoDB - мне стали понятны после прочтения некоторых статей...
Что с ним можно одновременно и читать и писать данные.

В то время как MyISM - блокирует таблицу, пока пишет (так понимаю что это всегда по умолчанию).
Соответственно тот, кто пока пишет - "просит" подождать всех остальных.

Но почему он так медленно работает?

Отредактированно Slorvengo (15.01.2014 14:00:13)

Неактивен

 

#3 15.01.2014 14:39:20

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

Прям как донесение разведчика - никаких точных данных. Например, "одну из популярных CMS" - какую?

Если ткнуть пальцем в небо, то предположу, что настройки для иннобд дефолтные.

Для начала покажите лог медленных запросов и содержимое конфиг файла my.cnf

Неактивен

 

#4 15.01.2014 16:34:52

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

Вопрос в том какие у вас запросы идут к этим таблицам? Так как Innodb работает транзакционно и для этого поддерживает мультиверсионность (множественные версии каждой из строк), то одиночная операция на ненагруженном сервере будем немного медленнее, чем для MyISAM (это правда не будет описываться словами "так тормозит", поэтому кажется, дело не в этом). Еще бывают операции, которые на InnoDB выполняются медленно опять же из-за требования мультиверсионности, а на MyISAM мгновенны (например, SELECT count(*) FROM my_table).

Неактивен

 

#5 16.01.2014 22:24:28

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

my.cnf

# Example MySQL config file for small systems.
#
# This is for a system with little memory (<= 64M) where MySQL is only used
# from time to time and it's important that the mysqld daemon
# doesn't use much resources.
#
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[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
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
server-id    = 1

# Uncomment the following if you want to log updates
#log-bin=mysql-bin

# binary logging format - mixed recommended
#binlog_format=mixed

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout

Неактивен

 

#6 16.01.2014 22:28:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high

#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

Неактивен

 

#7 17.01.2014 12:02:35

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

vasya написал:

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high

#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

Т.е. мне просто надо все это расскомментировать?
И перезапустить?

Неактивен

 

#8 17.01.2014 13:49:20

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

Ну не прямо раскомментировать. Там есть текстовые комментарии, которые поясняют. Например, переменную innodb_buffer_pool_size стоит сделать побольше, можно 1 Гб. Но вы не пояснили в чем конкретно проблема, какие запросы и в чем их медленность.

Неактивен

 

#9 17.01.2014 15:44:45

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

Выполняются медленно - обычные запросы INSERT

Вот в такие таблицы
#
# TABLE STRUCTURE FOR TABLE 'cacheTable'
#
CREATE TABLE cacheTable (
    id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    identifier VARCHAR(250) DEFAULT '' NOT NULL,
    crdate INT(11) UNSIGNED DEFAULT '0' NOT NULL,
    content mediumblob,
    lifetime INT(11) UNSIGNED DEFAULT '0' NOT NULL,
    PRIMARY KEY (id),
    KEY cache_id (identifier)
) ENGINE=InnoDB;

Неактивен

 

#10 17.01.2014 16:15:42

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

innodb_flush_log_at_trx_commit=0
и увеличьте buffer_pool и log_buffer

Неактивен

 

#11 17.01.2014 18:12:45

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

insert по 40сек ?

Неактивен

 

#12 17.01.2014 18:31:12

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

Сколько строк вставляет INSERT и какой объем контента в каждой?

Неактивен

 

#13 17.01.2014 21:26:42

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

vasya написал:

insert по 40сек ?

7-40 секунд.

rgbeast написал:

Сколько строк вставляет INSERT и какой объем контента в каждой?

Первый раз при вызове страницы - что - бы не соврать - вставок в таблицы для кэша - может быть 100-150, а то и больше.
Про объем контента - думаю, что 80% - это страница как есть. Все остальное это служебное . Так может быть содержимое PHP-массива, адрес ЧПУ - т.е. не очень большое.

Отредактированно Slorvengo (17.01.2014 21:29:50)

Неактивен

 

#14 17.01.2014 22:42:34

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

Тогда очень странно 7-40 секунд. Попробуйте в это время выполнить SHOW FULL PROCESSLIST;

Неактивен

 

#15 17.01.2014 23:15:16

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

rgbeast написал:

Тогда очень странно 7-40 секунд. Попробуйте в это время выполнить SHOW FULL PROCESSLIST;

Еще не  разкомментировал строки.

Неактивен

 

#16 20.01.2014 21:26:48

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Использую одну из CMS - вопрос про InnoDB и MyISAM

rgbeast написал:

Тогда очень странно 7-40 секунд. Попробуйте в это время выполнить SHOW FULL PROCESSLIST;

Сменил на InnoDB - как сказано .....
Все отлично работает - и даже бы сказал, что лучше -
чуточку быстрее работает SELECT чем MyISAM...

И как-он лучше держит - когда например есть посещения на сайте...
Как-то более и не заметно, что сайт , кто-то посещает (кроме тебя) - странички быстро открываются.

В то время как с MyISAM - при посещениях - сайт мог долго думать!
Единственное вставка Insert - чуть-чуть медленнее идет (но это не заметно).
А самое главное - как и должно быть - InnoDB!

Спасибо.

Отредактированно Slorvengo (20.01.2014 21:29:36)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson