Оптимизация mysql сервера

MySQL, PostgreSQL, InterBaseSQL etc

Модераторы: Art.i, vasya

Оптимизация mysql сервера

Сообщение Dexter » Вс июл 12, 2009 2:25 pm

Скажу сразу, с mysql плохо получается дружить. И в момент когда выполнил все оптимизации веб серверов и радовался, меня поджидала другая проблема - mysql сервер. Время коннекта 7-8 сек. На сайтах генерации тоже не радуют... Почитал некоторые документы, в них пишут про innodb и т.д. А я даже не знаю используется ли он у меня, вроде как Innodb считается предустановленым в в версиях mysql начиная с 4,х+ (при сборке с параметром). Ну... Вообщем даю конфиг, а вы, знатоки просмотрите что так или не так?

Статьи:
http://newcontinent.ru/h/mysqlc/14.htm
http://www.opennet.ru/tips/info/2035.shtml

Конфиг:
Код: выделить все
# 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.
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/db/mysql) or
# ~/.my.cnf to set user-specific options.
#
# 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/tmp/mysql.sock
default-character-set = utf8

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port      = 3306
socket      = /var/tmp/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K

# 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
default-character-set = utf8

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

# Disable Federated by default
skip-federated

# Uncomment the following if you are NOT using BDB tables
skip-bdb

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/db/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/db/mysql/
#innodb_log_arch_dir = /var/db/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
default-character-set = utf8

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

default-character-set = utf8
[isamchk]
key_buffer = 8M
sort_buffer_size = 8M

[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout
Dexter
 
Сообщений: 28
Зарегистрирован: Ср июн 10, 2009 7:47 pm

Сообщение argosxx » Вс июл 12, 2009 3:14 pm

Исходя из конфига у тебя поддержка innodb включена. Она нужна для реляционных баз данных - позволяет делать сложные запросы с использованием сразу нескольких таблиц. Так же там существует поддержка транзакций. Если грамотно этим воспользоваться то скорость выполнения запросов возрастет, однако это увеличит и потребляемую под mysql сервер оперативную память. Поэтому если у вас запросы простые то смысла включать INNODB нет.

PS что бы выключить поддержку innodb надо прописать
Код: выделить все
skip-innodb


Могу посоветовать перелопатить код и посмотреть можно ли из 2-3 простых запросов сделать один. Вобщем постараться сжать все запросы.
argosxx
 
Сообщений: 95
Зарегистрирован: Пн фев 16, 2009 2:36 pm

Сообщение Dexter » Пн июл 13, 2009 1:32 am

На сервере стоят cms joomla + vmart, dle, wordress. DLE работают быстро, wordpress'ы умеренно, а вот jooml'ы медленно. Даже чистая свежеустановленная жумла работает на моем сервере медленее чем на некоторых хостерских серверах. Вот я и грешу на бд...
Dexter
 
Сообщений: 28
Зарегистрирован: Ср июн 10, 2009 7:47 pm

Сообщение argosxx » Пн июл 13, 2009 2:47 am

Полностью согласен что это будет работать медленнее чем на хостингах. У вдс другие приемущества. Но конечно время коннекта 5-7 сек это и для вдс очень медленно)))
ps Joomla насколько я знаю сама по себе довольно требовательна...
А вообще вот тема думаю для вас подойдет http://forum.firstvds.ru/viewtopic.php?t=4246
argosxx
 
Сообщений: 95
Зарегистрирован: Пн фев 16, 2009 2:36 pm

Сообщение Dulfer » Вт июл 14, 2009 12:50 pm

Прости, а на основании чего ты решил что время коннекта 7-8 секунд?
Dulfer
 
Сообщений: 52
Зарегистрирован: Пт янв 02, 2009 9:52 pm

Re: Оптимизация mysql сервера

Сообщение argosxx » Вт июл 14, 2009 12:58 pm

Dexter писал(а):Скажу сразу, с mysql плохо получается дружить. И в момент когда выполнил все оптимизации веб серверов и радовался, меня поджидала другая проблема - mysql сервер. Время коннекта 7-8 сек. На сайтах генерации тоже не радуют... Почитал некоторые документы, в них пишут про innodb и т.д. А я даже не знаю используется ли он у меня, вроде как Innodb считается предустановленым в в версиях mysql начиная с 4,х+ (при сборке с параметром). Ну... Вообщем даю конфиг, а вы, знатоки просмотрите что так или не так?

Статьи:
http://newcontinent.ru/h/mysqlc/14.htm
http://www.opennet.ru/tips/info/2035.shtml

Конфиг:
Код: выделить все
# 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.
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/db/mysql) or
# ~/.my.cnf to set user-specific options.
#
# 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/tmp/mysql.sock
default-character-set = utf8

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port      = 3306
socket      = /var/tmp/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K

# 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
default-character-set = utf8

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

# Disable Federated by default
skip-federated

# Uncomment the following if you are NOT using BDB tables
skip-bdb

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/db/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/db/mysql/
#innodb_log_arch_dir = /var/db/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
default-character-set = utf8

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

default-character-set = utf8
[isamchk]
key_buffer = 8M
sort_buffer_size = 8M

[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout



ТЫ ЖЕ САМ ПИСАЛ! Время коннекта 7-8 сек.
argosxx
 
Сообщений: 95
Зарегистрирован: Пн фев 16, 2009 2:36 pm

Сообщение Dexter » Вт июл 14, 2009 2:04 pm

Я не решал, решали различные тесты, которые показывали мне такое время.
Dexter
 
Сообщений: 28
Зарегистрирован: Ср июн 10, 2009 7:47 pm

Сообщение Dulfer » Вт июл 14, 2009 2:19 pm

А вот оно что.
Ну так берём wordpress, ставим плагин WP-tuner. Включаем отладку по полной. Далее заходим на сайт админом и смотрим в подвал. Вот это и будут реальные данные.
Dulfer
 
Сообщений: 52
Зарегистрирован: Пт янв 02, 2009 9:52 pm

Сообщение VdsMaster » Пн июл 27, 2009 3:17 am

так не пробовал http://forum.firstvds.ru/viewtopic.php?t=5358 ?
___
Помогу настроить за wmz, Вашу VDS.
Качество гарантирую.
Если Вы мне не доверяете, не обращайтесь ко мне.
VdsMaster
 
Сообщений: 3
Зарегистрирован: Пн июл 27, 2009 2:43 am

Сообщение John_Lepikhin » Пн авг 17, 2009 4:17 pm

Вы немного запутали друг друга. InnoDB начинает использоваться ровно с того момента, как вы создали таблицу с таким типом:

create table tbl (...) engine=innodb


А параметр конфига skip-innodb просто выключает подгрузку движка (кстати, если вы не используете InnoDB, это сэкономит вам около мегабайта памяти).

Памяти InnoDB может потреблять больше, а может меньше. Всё зависит от настроек в my.cnf.
Я не рекомендую использовать InnoDB на VDS: этот движок рассчитан на то, что выключены write-кэши OS и всем подобным кэшированием InnoDB занимается самостоятельно. На производительность этот факт практически никак не влияет, однако может привести к потере данных в случае сбоя. А учитывая, что в InnoDB нет механизма восстановления таблиц (repair table), всё это может привести к ещё большему даунтайму вашей БД.

Автору темы: не видя конкретной БД, статистики MySQL и т.д. сложно посоветовать оптимальные значения. И в этом случае, лучшим решением действительно будет взять один из универсальных конфигов-примеров, как вам уже посоветовали. Брать варианты large и huge не надо, VDS их просто не потянет.
John_Lepikhin
Консультант
 
Сообщений: 63
Зарегистрирован: Вс май 29, 2005 6:43 am


Вернуться в Базы данных

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron