SlideShare ist ein Scribd-Unternehmen logo
1 von 34
• /etc/my.cnf
• /etc/mysql/my.cnf
$ which mysqld
/usr/sbin/mysqld
$ /usr/sbin/mysqld --verbose --help | grep -A 1 ‘Default
options’
Default options are read from the following files in the
given order:
/etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf
• Переменная query_cache_size имеет глобальную область
видимости.
• Переменная sort_buffer_size имеет глобальное значение по
умолчанию, но может быть изменена на уровне сеанса.
• Переменная join_buffer_size имеет глобальное значение по
умолчанию, может быть изменена на уровне сеанса, но,
кроме того, для каждого запроса, в котором соединяется
несколько таблиц, можно выделить по одному буферу на
операцию соединения, то есть для одного запроса может
существовать несколько буферов соединения.
• SET sort_buffer_size = <value>;
• SET GLOBAL sort_buffer_size = <value>;
• SET @@sort_buffer_size := <value>;
• SET @@session.sort_buffer_size := <value>;
• SET @@global.sort_buffer_size := <value>;
1. Определить абсолютный верхний предел объема памяти,
которую MySQL может использовать.
2. Определить, сколько памяти MySQL будет использовать на
каждое соединение, например для буферов сортировки и
временных таблиц.
3. Определить, сколько памяти нужно операционной системе
для нормальной работы. Сюда следует включить и память для
других программ, работающих на той же машине, например
периодически выполняемых заданий.
4. Если это имеет смысл, отдайте всю оставшуюся память под
кэши MySQL, например, под пул буферов InnoDB.
key_buffer_size
25 – 50 % от общего объема памяти, зарезервированного
для кэшей
key_buffer_1.key_buffer_size = 1G
key_buffer_2.key_buffer_size = 1G
CACHE INDEX t1, t2 IN key_buffer_1;
LOAD INDEX INTO CACHE t1, t2;
Эту SQL-команду можно поместить в файл, выполняемый
MySQL на этапе запуска. Имя файла задается с помощью
параметра init_file; в нем может быть несколько SQL-команд,
каждая в отдельной строке
key_buffer_size
25 – 50 % от общего объема памяти, зарезервированного
для кэшей
key_buffer_1.key_buffer_size = 1G
key_buffer_2.key_buffer_size = 1G
CACHE INDEX t1, t2 IN key_buffer_1;
LOAD INDEX INTO CACHE t1, t2;
Эту SQL-команду можно поместить в файл, выполняемый
MySQL на этапе запуска. Имя файла задается с помощью
параметра init_file; в нем может быть несколько SQL-команд,
каждая в отдельной строке
Коэффициент попаданий в кэш
key_reads *100
100 − ---------------------------
key_reads_requests
Коэффициент заполненности буфера
key_blocks_unused * key_cache_block_size * 100
100 − --------------------------------------------------------------------
key_buffer_size
Количество непопаданий в кэш за секунду
key_reads / uptime
1. MyISAM запрашивает блок ключей размером 1 Кбайт с диска.
2. ОС считывает страницу данных размером 4 Кбайт с диска,
кэширует ее, а затем передает MyISAM затребованный 1
Кбайт.
3. ОС отбрасывает закэшированные данные, замещая их
какими-то другими.
4. MyISAM модифицирует блок ключей размером 1 Кбайт и
просит операционную систему записать его обратно на диск.
5. ОС считывает ту же самую страницу размером 4 Кбайт с диска
в свой кэш, модифицирует в ней тот килобайт, который
изменил MyISAM, и записывает все 4 Кбайт обратно на диск.
innodb_buffer_pool_size
до 80% физической памяти
В отличие от кэша ключей MyISAM, в пуле буферов InnoDB
кэшируются не только индексы, там также хранятся сами данные,
буфер вставок, блокировки и другие внутренние структуры. В
InnoDB пулбуферов используется также для реализации
отложенных операций записи и позволяет объединить несколько
таких процедур, чтобы затем выполнить их последовательно
innodb_max_dirty_pages_pct
говорит InnoDB о допустимом количестве «грязных»
(модифицированных) страниц в пуле буферов
thread_cache_size
определяет максимальное количество потоков в кэше
SHOW STATUS LIKE 'Threads_created';
SHOW STATUS LIKE 'Threads_connected';
table_open_cache
кэш открытых таблиц
table_definition_cache
кэш определений таблиц
delay_key_write
OFF
MyISAM сбрасывает измененные блоки из буфера ключей
после каждой записи, если только таблица не блокирована
командой LOCK TABLES.
ON
Включен режим отложенной записи ключей, но только для
таблиц, созданных с параметром DELAY_KEY_WRITE.
ALL
Для всех таблиц типа MyISAM используется отложенная
запись
ключей
• Если сервер аварийно завершает работу, а блоки не были
сброшены на диск, то индекс будет испорчен.
• Если было отложено много операций записи, то MySQL
потратит больше времени на закрытие таблицы, поскольку
вынуждена ждать завершения записи буферов на диск
• По тем же причинам команда FLUSH TABLES может занимать
много времени.
• Не сброшенные «грязные» блоки в буфере ключей могут не
оставить места для новых блоков, считываемых с диска. В
таком случае выполнение запроса будет приостановлено на
время, пока MyISAM не освободит достаточно места в буфере
ключей.
innodb_log_file_size
общий максимальный размер файла логов
транзакций
innodb_log_files_in_group
количество файлов в группе
innodb_log_buffer_size
размер буфера лога транзакций
innodb_flush_log_at_trx_commit
0 - Писать буфер в файл журнала и сбрасывать журнал на
устройство постоянного хранения (диск) раз в секунду, но
ничего не делать в момент фиксации транзакции.
1 - Писать буфер в файл журнала и сбрасывать его на
устройство постоянного хранения при каждой фиксации
транзакции.
2 - Писать буфер в файл журнала при каждой фиксации, но
не сбрасывать его на устройство постоянного хранения
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:1G;ibdata2:1G;ibdata3:1G
Чтобы табличное пространство могло расти, когда место
заканчивается, можно сделать последний файл автоматически
расширяемым:
...ibdata3:1G:autoextend
...ibdata3:1G:autoextend:max:2G
innodb_file_per_table
отдельный файл на каждую таблицу
max_length_for_sort_data
Двухпроходный алгоритм применяется, если суммарная
длина всех столбцов, отбираемых запросом, плюс длина
столбцов, упоминаемых во фразе ORDER BY, превышает
max_length_for_sort_data байтов.
max_sort_length
При сортировке по столбцам типа BLOB или TEXT MySQL
принимает во внимание только префикс, а остаток значения
игнорирует. Длина такого префикса задается параметром
max_sort_length.
SHOW GLOBAL STATUS;
mysqladmin extended - r - i60
Aborted_clients
Если эта переменная со временем растет, проверьте,
корректно ли закрываются соединения. Если нет, обратите
внимание на производительность сети, а также на
конфигурационную переменную max_allowed_packet.
Aborted_connects
Значение этой переменной должно быть близко к нулю.
Если это не так, то, возможно, имеют место проблемы с сетью.
Binlog_cache_disk_use и Binlog_cache_use
Если отношение Binlog_cache_disk_use к Binlog_cache_use
велико, попробуйте увеличить значение binlog_cache_size.
Самый лучший подход – увеличить параметр binlog_cache_size и
посмотреть, уменьшится ли число непопаданий в кэш.
Bytes_received и Bytes_sent
Эти значения помогают понять, не слишком ли велик
трафик в направлении к серверу или от него.
Возможно, причина таится где-то в вашем коде
Created_tmp_disk_tables
Если это значение велико, то возможно одно из двух:
либо запросы создают временные таблицы в результате
выборки столбцов типа BLOB или TEXT, либо недостаточно
велики значения конфигурационных параметров tmp_table_size
и/или max_heap_table_size.
Handler_read_rnd_next
Отношение Handler_read_rnd_next / Handler_read_rnd
дает приблизительную оценку среднего размера полного
сканирования таблиц. Если оно велико, то, возможно, следует
оптимизировать схему, индексы или запросы.
Key_blocks_used
Если величина Key_blocks_used * key_cache_block_size
гораздо меньше, чем параметр key_buffer_size на прогретом
сервере, то размер буфера ключей (key_buffer_size) больше
необходимого, и вы только впустую растрачиваете память.
Key_reads
Понаблюдайте за количеством операций чтения в
секунду и посмотрите, насколько близко это значение
приближается к предельным показателям подсистемы
ввода/вывода.
Open_tables и Opened_tables
Сравните это значение с величиной параметра
table_cache. Если количество открываемых таблиц
(Opened_tables) в секунду велико, то, вероятно, размер кэша
таблиц (table_cache) недостаточен.
Select_full_join
Полное соединение – это соединение без индексов,
такая операция может очень сильно «посадить»
производительность. Лучше, чтобы их вовсе не было, даже
одного в минуту может быть много. Обнаружив соединение без
индексов, примите все меры к оптимизации запросов.
Sort_merge_passes
Большое значение этой переменной означает, что надо
бы увеличить размер буфера сортировки (sort_buffer_size), быть
может, только ради некоторых запросов. Проверьте запросы и
найдите среди них те, которые приводят к сортировке (filesort).
Возможно, их удастся оптимизировать.
Threads_created
Если это значение велико или растет, то, возможно, стоит
увеличить параметр thread_cache_size. Переменная
Threads_cached показывает, сколько потоков уже находится в
кэше.
Распространение данных
Обычно репликация в MySQL потребляет не очень большую часть
пропускной способности сети, к тому же ее можно в любой момент остановить
и затем возобновить. Это полезно, если хранение копии данных происходит в
географически удаленном пункте, например в другом центре обработки
данных.
Балансировка нагрузки
С помощью репликации можно распределить запросы на чтение
между несколькими серверами MySQL; в приложениях с интенсивным чтением
эта тактика работает очень хорошо. Реализовать несложное балансирование
нагрузки можно, внеся совсем немного изменений в код.
Резервное копирование
Репликация – это ценное подспорье для резервного копирования.
Однако подчиненный сервер все же не может использоваться в качестве
резервной копии и не является заменой настоящему резервному копированию.
Высокая доступность и аварийное переключение на резервный сервер
(failover)
Репликация позволяет исправить ситуацию, при которой сервер MySQL
является единственной точкой отказа приложения. Хорошая система
аварийного переключения при отказе, имеющая в составе реплицированные
подчиненные серверы, способна существенно сократить время простоя.
Тестирование новых версий MySQL
Очень часто на подчиненный сервер устанавливают новую версию
MySQL и перед тем как ставить ее на промышленные серверы, проверяют, что
все запросы работают нормально.
1. Главный сервер записывает изменения данных в двоичный журнал. Эти
записи называются событиями двоичного журнала.
2. Подчиненный сервер копирует события двоичного журнала в свой журнал
ретрансляции (relay log).
3. Подчиненный сервер воспроизводит события из журнала ретрансляции,
применяя изменения к собственным данным.
1. Завести учетные записи репликации на каждом
сервере.
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*
TO repl@’192.168.0.%’ IDENTIFIED BY ‘p4ssword’;
2. Сконфигурировать главный и подчиненный сервера.
3. Сказать подчиненному серверу, чтобы он соединился с
главным и начал реплицировать данные с него.
2.A Сконфигурировать главный сервер.
log_bin = mysql-bin
server_id = 10
SHOW MASTER STATUS;
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
| mysql-bin.000001 | 98 | | |
2.Б Сконфигурировать подчиненный сервер.
log_bin = mysql-bin
server_id = 2
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1
3. Сказать подчиненному серверу, чтобы он соединился с
главным и начал реплицировать данные с него.
CHANGE MASTER TO MASTER_HOST=’server1’,
MASTER_USER=’repl’, MASTER_PASSWORD=’p4ssword’,
MASTER_LOG_FILE=’mysql-bin.000001’,
MASTER_LOG_POS=0;
SHOW SLAVE STATUS;
START SLAVE;
• Мгновенный снимок данных главного сервера в
некоторый момент времени.
• Текущий файл журнала главного сервера и смещение
от начала этого файла в точности на тот момент
времени, когда был сделан мгновенный снимок.
Вместе они называются координатами репликации,
так как однозначно идентифицируют позицию в
двоичном журнале. Найти координаты репликации
вам поможет команда SHOW MASTER STATUS.
• Файлы двоичных журналов главного сервера с
момента мгновенного снимка до текущего момента.
Холодная копия
Остановить сервер, который впоследствии станет главным, и скопировать
файлы с него на подчиненный сервер. Недостаток такого решения очевиден: в
течение всего времени копирования главный сервер должен быть остановлен.
Горячая копия
Если все таблицы имеют тип MyISAM, то можно воспользоваться командой
mysqlhotcopy, которая копирует файлы с работающего сервера.
Использование mysqldump
Если все таблицы имеют тип InnoDB, то можно воспользоваться такой
командой:
mysqldump --single-transaction --all-databases --master-data=1 --host=server1 |
mysql --host=server2
С помощью мгновенного снимка LVM или резервной копии
Если известны координаты в нужном двоичном журнале, можно
воспользоваться мгновенным снимком LVM или резервной копией.
На основе другого подчиненного сервера
Серьезный недостаток клонирования другого подчиненного сервера состоит
в том, что подчиненный сервер может быть рассинхронизирован с главным.
• У каждого подчиненного сервера MySQL может быть только
один главный.
• У каждого подчиненного сервера должен быть уникальный
идентификатор.
• Один главный сервер может иметь много подчиненных (иными
словами, у подчиненного сервера может быть много
«братьев»).
• Подчиненный сервер может распространять полученные от
главного изменения далее, то есть выступать в роли главного
сервера для своих подчиненных; для этого следует включить
режим log_slave_updates.
СУБД осень 2012 лекция 9

Weitere ähnliche Inhalte

Was ist angesagt?

Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Ontico
 
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Ontico
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...Ontico
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practiceAlexey Lesovsky
 
Magento performance
Magento performanceMagento performance
Magento performanceaheadWorks
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...Technopark
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1Nikolay Samokhvalov
 
Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Ontico
 
Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008Ontico
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationAlexey Lesovsky
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Alexey Lesovsky
 
Call of Postgres: Advanced Operations (part 1)
Call of Postgres: Advanced Operations (part 1)Call of Postgres: Advanced Operations (part 1)
Call of Postgres: Advanced Operations (part 1)Alexey Lesovsky
 
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.Anastasia Lubennikova
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросыNikolay Samokhvalov
 
Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)Alexey Lesovsky
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...ForkConf
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Ontico
 
Беспроблемная эксплуатация PostgreSQL
Беспроблемная эксплуатация PostgreSQLБеспроблемная эксплуатация PostgreSQL
Беспроблемная эксплуатация PostgreSQLДмитрий Васильев
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 

Was ist angesagt? (20)

Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
Magento performance
Magento performanceMagento performance
Magento performance
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1
 
Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008
 
Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming Replication
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.
 
Call of Postgres: Advanced Operations (part 1)
Call of Postgres: Advanced Operations (part 1)Call of Postgres: Advanced Operations (part 1)
Call of Postgres: Advanced Operations (part 1)
 
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
 
Беспроблемная эксплуатация PostgreSQL
Беспроблемная эксплуатация PostgreSQLБеспроблемная эксплуатация PostgreSQL
Беспроблемная эксплуатация PostgreSQL
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 

Andere mochten auch

Web осень 2012 лекция 1
Web осень 2012 лекция 1Web осень 2012 лекция 1
Web осень 2012 лекция 1Technopark
 
Java осень 2012 лекция 2
Java осень 2012 лекция 2Java осень 2012 лекция 2
Java осень 2012 лекция 2Technopark
 
СУБД осень 2012 Лекция 3
СУБД осень 2012 Лекция 3СУБД осень 2012 Лекция 3
СУБД осень 2012 Лекция 3Technopark
 
Highload осень 2012 лекция 3
Highload осень 2012 лекция 3Highload осень 2012 лекция 3
Highload осень 2012 лекция 3Technopark
 
Алгоритмы и структуры данных осень 2013 лекция 7
Алгоритмы и структуры данных осень 2013 лекция 7Алгоритмы и структуры данных осень 2013 лекция 7
Алгоритмы и структуры данных осень 2013 лекция 7Technopark
 
Java осень 2012 лекция 8
Java осень 2012 лекция 8Java осень 2012 лекция 8
Java осень 2012 лекция 8Technopark
 
Web весна 2012 лекция 9
Web весна 2012 лекция 9Web весна 2012 лекция 9
Web весна 2012 лекция 9Technopark
 
Femmes et Internet par Najoua Kooli (CEFRIO)
Femmes et Internet par Najoua Kooli (CEFRIO)Femmes et Internet par Najoua Kooli (CEFRIO)
Femmes et Internet par Najoua Kooli (CEFRIO)Najoua Kooli
 
СУБД осень 2012 лекция 6
СУБД осень 2012 лекция 6СУБД осень 2012 лекция 6
СУБД осень 2012 лекция 6Technopark
 
Innovation and entrepreneurship 2
Innovation and entrepreneurship 2Innovation and entrepreneurship 2
Innovation and entrepreneurship 2Mayank Singh
 
Resenha a beleza de cristo e o carater cristao
Resenha a beleza de cristo e o carater cristaoResenha a beleza de cristo e o carater cristao
Resenha a beleza de cristo e o carater cristaoAndré Sandiêgo Falcão
 

Andere mochten auch (12)

Web осень 2012 лекция 1
Web осень 2012 лекция 1Web осень 2012 лекция 1
Web осень 2012 лекция 1
 
Java осень 2012 лекция 2
Java осень 2012 лекция 2Java осень 2012 лекция 2
Java осень 2012 лекция 2
 
СУБД осень 2012 Лекция 3
СУБД осень 2012 Лекция 3СУБД осень 2012 Лекция 3
СУБД осень 2012 Лекция 3
 
Highload осень 2012 лекция 3
Highload осень 2012 лекция 3Highload осень 2012 лекция 3
Highload осень 2012 лекция 3
 
Алгоритмы и структуры данных осень 2013 лекция 7
Алгоритмы и структуры данных осень 2013 лекция 7Алгоритмы и структуры данных осень 2013 лекция 7
Алгоритмы и структуры данных осень 2013 лекция 7
 
Java осень 2012 лекция 8
Java осень 2012 лекция 8Java осень 2012 лекция 8
Java осень 2012 лекция 8
 
Web весна 2012 лекция 9
Web весна 2012 лекция 9Web весна 2012 лекция 9
Web весна 2012 лекция 9
 
Femmes et Internet par Najoua Kooli (CEFRIO)
Femmes et Internet par Najoua Kooli (CEFRIO)Femmes et Internet par Najoua Kooli (CEFRIO)
Femmes et Internet par Najoua Kooli (CEFRIO)
 
Los impuestos
Los impuestosLos impuestos
Los impuestos
 
СУБД осень 2012 лекция 6
СУБД осень 2012 лекция 6СУБД осень 2012 лекция 6
СУБД осень 2012 лекция 6
 
Innovation and entrepreneurship 2
Innovation and entrepreneurship 2Innovation and entrepreneurship 2
Innovation and entrepreneurship 2
 
Resenha a beleza de cristo e o carater cristao
Resenha a beleza de cristo e o carater cristaoResenha a beleza de cristo e o carater cristao
Resenha a beleza de cristo e o carater cristao
 

Ähnlich wie СУБД осень 2012 лекция 9

Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012Alex Chistyakov
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuningcollabock
 
"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)AvitoTech
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Oleg Tsarev
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLAlex Chistyakov
 
MySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовMySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовSoftline
 
Как читать и интерпретировать вывод команды EXPLAIN
Как читать и интерпретировать вывод команды EXPLAINКак читать и интерпретировать вывод команды EXPLAIN
Как читать и интерпретировать вывод команды EXPLAINAlexey Ermakov
 
Что нового в SQL Server 2014
Что нового в SQL Server 2014Что нового в SQL Server 2014
Что нового в SQL Server 2014Andrey Korshikov
 
12 - Hadoop. HBase и Cassandra
12 - Hadoop. HBase и Cassandra12 - Hadoop. HBase и Cassandra
12 - Hadoop. HBase и CassandraRoman Brovko
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XCPostgreSQL-Consulting
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
Kostja Root Conf
Kostja Root ConfKostja Root Conf
Kostja Root ConfLiudmila Li
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
 
Оптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовОптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовAlex.Kolonitsky
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Ontico
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Badoo Development
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения PerconaСовременному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения PerconaSveta Smirnova
 

Ähnlich wie СУБД осень 2012 лекция 9 (20)

Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuning
 
"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
MySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовMySQL для высоконагруженных проектов
MySQL для высоконагруженных проектов
 
Как читать и интерпретировать вывод команды EXPLAIN
Как читать и интерпретировать вывод команды EXPLAINКак читать и интерпретировать вывод команды EXPLAIN
Как читать и интерпретировать вывод команды EXPLAIN
 
Что нового в SQL Server 2014
Что нового в SQL Server 2014Что нового в SQL Server 2014
Что нового в SQL Server 2014
 
SECON.Посиделки #16: Cassandra (презентация)
SECON.Посиделки #16: Cassandra (презентация) SECON.Посиделки #16: Cassandra (презентация)
SECON.Посиделки #16: Cassandra (презентация)
 
12 - Hadoop. HBase и Cassandra
12 - Hadoop. HBase и Cassandra12 - Hadoop. HBase и Cassandra
12 - Hadoop. HBase и Cassandra
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Текст.pptx
Текст.pptxТекст.pptx
Текст.pptx
 
Kostja Root Conf
Kostja Root ConfKostja Root Conf
Kostja Root Conf
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
Оптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовОптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросов
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения PerconaСовременному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
 

Mehr von Technopark

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"Technopark
 
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"Technopark
 
СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"Technopark
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8Technopark
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7Technopark
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6Technopark
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 

Mehr von Technopark (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
 
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
 
СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 

СУБД осень 2012 лекция 9

  • 1.
  • 2. • /etc/my.cnf • /etc/mysql/my.cnf $ which mysqld /usr/sbin/mysqld $ /usr/sbin/mysqld --verbose --help | grep -A 1 ‘Default options’ Default options are read from the following files in the given order: /etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf
  • 3. • Переменная query_cache_size имеет глобальную область видимости. • Переменная sort_buffer_size имеет глобальное значение по умолчанию, но может быть изменена на уровне сеанса. • Переменная join_buffer_size имеет глобальное значение по умолчанию, может быть изменена на уровне сеанса, но, кроме того, для каждого запроса, в котором соединяется несколько таблиц, можно выделить по одному буферу на операцию соединения, то есть для одного запроса может существовать несколько буферов соединения.
  • 4. • SET sort_buffer_size = <value>; • SET GLOBAL sort_buffer_size = <value>; • SET @@sort_buffer_size := <value>; • SET @@session.sort_buffer_size := <value>; • SET @@global.sort_buffer_size := <value>;
  • 5. 1. Определить абсолютный верхний предел объема памяти, которую MySQL может использовать. 2. Определить, сколько памяти MySQL будет использовать на каждое соединение, например для буферов сортировки и временных таблиц. 3. Определить, сколько памяти нужно операционной системе для нормальной работы. Сюда следует включить и память для других программ, работающих на той же машине, например периодически выполняемых заданий. 4. Если это имеет смысл, отдайте всю оставшуюся память под кэши MySQL, например, под пул буферов InnoDB.
  • 6. key_buffer_size 25 – 50 % от общего объема памяти, зарезервированного для кэшей key_buffer_1.key_buffer_size = 1G key_buffer_2.key_buffer_size = 1G CACHE INDEX t1, t2 IN key_buffer_1; LOAD INDEX INTO CACHE t1, t2; Эту SQL-команду можно поместить в файл, выполняемый MySQL на этапе запуска. Имя файла задается с помощью параметра init_file; в нем может быть несколько SQL-команд, каждая в отдельной строке
  • 7. key_buffer_size 25 – 50 % от общего объема памяти, зарезервированного для кэшей key_buffer_1.key_buffer_size = 1G key_buffer_2.key_buffer_size = 1G CACHE INDEX t1, t2 IN key_buffer_1; LOAD INDEX INTO CACHE t1, t2; Эту SQL-команду можно поместить в файл, выполняемый MySQL на этапе запуска. Имя файла задается с помощью параметра init_file; в нем может быть несколько SQL-команд, каждая в отдельной строке
  • 8. Коэффициент попаданий в кэш key_reads *100 100 − --------------------------- key_reads_requests Коэффициент заполненности буфера key_blocks_unused * key_cache_block_size * 100 100 − -------------------------------------------------------------------- key_buffer_size Количество непопаданий в кэш за секунду key_reads / uptime
  • 9. 1. MyISAM запрашивает блок ключей размером 1 Кбайт с диска. 2. ОС считывает страницу данных размером 4 Кбайт с диска, кэширует ее, а затем передает MyISAM затребованный 1 Кбайт. 3. ОС отбрасывает закэшированные данные, замещая их какими-то другими. 4. MyISAM модифицирует блок ключей размером 1 Кбайт и просит операционную систему записать его обратно на диск. 5. ОС считывает ту же самую страницу размером 4 Кбайт с диска в свой кэш, модифицирует в ней тот килобайт, который изменил MyISAM, и записывает все 4 Кбайт обратно на диск.
  • 10. innodb_buffer_pool_size до 80% физической памяти В отличие от кэша ключей MyISAM, в пуле буферов InnoDB кэшируются не только индексы, там также хранятся сами данные, буфер вставок, блокировки и другие внутренние структуры. В InnoDB пулбуферов используется также для реализации отложенных операций записи и позволяет объединить несколько таких процедур, чтобы затем выполнить их последовательно innodb_max_dirty_pages_pct говорит InnoDB о допустимом количестве «грязных» (модифицированных) страниц в пуле буферов
  • 11. thread_cache_size определяет максимальное количество потоков в кэше SHOW STATUS LIKE 'Threads_created'; SHOW STATUS LIKE 'Threads_connected'; table_open_cache кэш открытых таблиц table_definition_cache кэш определений таблиц
  • 12. delay_key_write OFF MyISAM сбрасывает измененные блоки из буфера ключей после каждой записи, если только таблица не блокирована командой LOCK TABLES. ON Включен режим отложенной записи ключей, но только для таблиц, созданных с параметром DELAY_KEY_WRITE. ALL Для всех таблиц типа MyISAM используется отложенная запись ключей
  • 13. • Если сервер аварийно завершает работу, а блоки не были сброшены на диск, то индекс будет испорчен. • Если было отложено много операций записи, то MySQL потратит больше времени на закрытие таблицы, поскольку вынуждена ждать завершения записи буферов на диск • По тем же причинам команда FLUSH TABLES может занимать много времени. • Не сброшенные «грязные» блоки в буфере ключей могут не оставить места для новых блоков, считываемых с диска. В таком случае выполнение запроса будет приостановлено на время, пока MyISAM не освободит достаточно места в буфере ключей.
  • 14.
  • 15. innodb_log_file_size общий максимальный размер файла логов транзакций innodb_log_files_in_group количество файлов в группе innodb_log_buffer_size размер буфера лога транзакций
  • 16. innodb_flush_log_at_trx_commit 0 - Писать буфер в файл журнала и сбрасывать журнал на устройство постоянного хранения (диск) раз в секунду, но ничего не делать в момент фиксации транзакции. 1 - Писать буфер в файл журнала и сбрасывать его на устройство постоянного хранения при каждой фиксации транзакции. 2 - Писать буфер в файл журнала при каждой фиксации, но не сбрасывать его на устройство постоянного хранения
  • 17. innodb_data_home_dir = /var/lib/mysql/ innodb_data_file_path = ibdata1:1G;ibdata2:1G;ibdata3:1G Чтобы табличное пространство могло расти, когда место заканчивается, можно сделать последний файл автоматически расширяемым: ...ibdata3:1G:autoextend ...ibdata3:1G:autoextend:max:2G innodb_file_per_table отдельный файл на каждую таблицу
  • 18. max_length_for_sort_data Двухпроходный алгоритм применяется, если суммарная длина всех столбцов, отбираемых запросом, плюс длина столбцов, упоминаемых во фразе ORDER BY, превышает max_length_for_sort_data байтов. max_sort_length При сортировке по столбцам типа BLOB или TEXT MySQL принимает во внимание только префикс, а остаток значения игнорирует. Длина такого префикса задается параметром max_sort_length.
  • 19. SHOW GLOBAL STATUS; mysqladmin extended - r - i60 Aborted_clients Если эта переменная со временем растет, проверьте, корректно ли закрываются соединения. Если нет, обратите внимание на производительность сети, а также на конфигурационную переменную max_allowed_packet. Aborted_connects Значение этой переменной должно быть близко к нулю. Если это не так, то, возможно, имеют место проблемы с сетью.
  • 20. Binlog_cache_disk_use и Binlog_cache_use Если отношение Binlog_cache_disk_use к Binlog_cache_use велико, попробуйте увеличить значение binlog_cache_size. Самый лучший подход – увеличить параметр binlog_cache_size и посмотреть, уменьшится ли число непопаданий в кэш. Bytes_received и Bytes_sent Эти значения помогают понять, не слишком ли велик трафик в направлении к серверу или от него. Возможно, причина таится где-то в вашем коде
  • 21. Created_tmp_disk_tables Если это значение велико, то возможно одно из двух: либо запросы создают временные таблицы в результате выборки столбцов типа BLOB или TEXT, либо недостаточно велики значения конфигурационных параметров tmp_table_size и/или max_heap_table_size. Handler_read_rnd_next Отношение Handler_read_rnd_next / Handler_read_rnd дает приблизительную оценку среднего размера полного сканирования таблиц. Если оно велико, то, возможно, следует оптимизировать схему, индексы или запросы.
  • 22. Key_blocks_used Если величина Key_blocks_used * key_cache_block_size гораздо меньше, чем параметр key_buffer_size на прогретом сервере, то размер буфера ключей (key_buffer_size) больше необходимого, и вы только впустую растрачиваете память. Key_reads Понаблюдайте за количеством операций чтения в секунду и посмотрите, насколько близко это значение приближается к предельным показателям подсистемы ввода/вывода.
  • 23. Open_tables и Opened_tables Сравните это значение с величиной параметра table_cache. Если количество открываемых таблиц (Opened_tables) в секунду велико, то, вероятно, размер кэша таблиц (table_cache) недостаточен. Select_full_join Полное соединение – это соединение без индексов, такая операция может очень сильно «посадить» производительность. Лучше, чтобы их вовсе не было, даже одного в минуту может быть много. Обнаружив соединение без индексов, примите все меры к оптимизации запросов.
  • 24. Sort_merge_passes Большое значение этой переменной означает, что надо бы увеличить размер буфера сортировки (sort_buffer_size), быть может, только ради некоторых запросов. Проверьте запросы и найдите среди них те, которые приводят к сортировке (filesort). Возможно, их удастся оптимизировать. Threads_created Если это значение велико или растет, то, возможно, стоит увеличить параметр thread_cache_size. Переменная Threads_cached показывает, сколько потоков уже находится в кэше.
  • 25. Распространение данных Обычно репликация в MySQL потребляет не очень большую часть пропускной способности сети, к тому же ее можно в любой момент остановить и затем возобновить. Это полезно, если хранение копии данных происходит в географически удаленном пункте, например в другом центре обработки данных. Балансировка нагрузки С помощью репликации можно распределить запросы на чтение между несколькими серверами MySQL; в приложениях с интенсивным чтением эта тактика работает очень хорошо. Реализовать несложное балансирование нагрузки можно, внеся совсем немного изменений в код.
  • 26. Резервное копирование Репликация – это ценное подспорье для резервного копирования. Однако подчиненный сервер все же не может использоваться в качестве резервной копии и не является заменой настоящему резервному копированию. Высокая доступность и аварийное переключение на резервный сервер (failover) Репликация позволяет исправить ситуацию, при которой сервер MySQL является единственной точкой отказа приложения. Хорошая система аварийного переключения при отказе, имеющая в составе реплицированные подчиненные серверы, способна существенно сократить время простоя. Тестирование новых версий MySQL Очень часто на подчиненный сервер устанавливают новую версию MySQL и перед тем как ставить ее на промышленные серверы, проверяют, что все запросы работают нормально.
  • 27. 1. Главный сервер записывает изменения данных в двоичный журнал. Эти записи называются событиями двоичного журнала. 2. Подчиненный сервер копирует события двоичного журнала в свой журнал ретрансляции (relay log). 3. Подчиненный сервер воспроизводит события из журнала ретрансляции, применяя изменения к собственным данным.
  • 28. 1. Завести учетные записи репликации на каждом сервере. GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@’192.168.0.%’ IDENTIFIED BY ‘p4ssword’; 2. Сконфигурировать главный и подчиненный сервера. 3. Сказать подчиненному серверу, чтобы он соединился с главным и начал реплицировать данные с него.
  • 29. 2.A Сконфигурировать главный сервер. log_bin = mysql-bin server_id = 10 SHOW MASTER STATUS; | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | | mysql-bin.000001 | 98 | | | 2.Б Сконфигурировать подчиненный сервер. log_bin = mysql-bin server_id = 2 relay_log = mysql-relay-bin log_slave_updates = 1 read_only = 1
  • 30. 3. Сказать подчиненному серверу, чтобы он соединился с главным и начал реплицировать данные с него. CHANGE MASTER TO MASTER_HOST=’server1’, MASTER_USER=’repl’, MASTER_PASSWORD=’p4ssword’, MASTER_LOG_FILE=’mysql-bin.000001’, MASTER_LOG_POS=0; SHOW SLAVE STATUS; START SLAVE;
  • 31. • Мгновенный снимок данных главного сервера в некоторый момент времени. • Текущий файл журнала главного сервера и смещение от начала этого файла в точности на тот момент времени, когда был сделан мгновенный снимок. Вместе они называются координатами репликации, так как однозначно идентифицируют позицию в двоичном журнале. Найти координаты репликации вам поможет команда SHOW MASTER STATUS. • Файлы двоичных журналов главного сервера с момента мгновенного снимка до текущего момента.
  • 32. Холодная копия Остановить сервер, который впоследствии станет главным, и скопировать файлы с него на подчиненный сервер. Недостаток такого решения очевиден: в течение всего времени копирования главный сервер должен быть остановлен. Горячая копия Если все таблицы имеют тип MyISAM, то можно воспользоваться командой mysqlhotcopy, которая копирует файлы с работающего сервера. Использование mysqldump Если все таблицы имеют тип InnoDB, то можно воспользоваться такой командой: mysqldump --single-transaction --all-databases --master-data=1 --host=server1 | mysql --host=server2 С помощью мгновенного снимка LVM или резервной копии Если известны координаты в нужном двоичном журнале, можно воспользоваться мгновенным снимком LVM или резервной копией. На основе другого подчиненного сервера Серьезный недостаток клонирования другого подчиненного сервера состоит в том, что подчиненный сервер может быть рассинхронизирован с главным.
  • 33. • У каждого подчиненного сервера MySQL может быть только один главный. • У каждого подчиненного сервера должен быть уникальный идентификатор. • Один главный сервер может иметь много подчиненных (иными словами, у подчиненного сервера может быть много «братьев»). • Подчиненный сервер может распространять полученные от главного изменения далее, то есть выступать в роли главного сервера для своих подчиненных; для этого следует включить режим log_slave_updates.