<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mysyslog.ru &#187; mysql</title>
	<atom:link href="http://mysyslog.ru/posts/tag/mysql/feed" rel="self" type="application/rss+xml" />
	<link>http://mysyslog.ru</link>
	<description>Всякая IT всячина</description>
	<lastBuildDate>Thu, 08 Jul 2010 13:51:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>mysql_secure_installation cвоими руками во FreeBSD</title>
		<link>http://mysyslog.ru/posts/524</link>
		<comments>http://mysyslog.ru/posts/524#comments</comments>
		<pubDate>Tue, 29 Jun 2010 13:25:40 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Советы]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=524</guid>
		<description><![CDATA[В большинстве пакетов mysql-server под Linux входи хороший скрипт mysql_secure_installation, которого очень не хватает в порте mysql во FreeBSD. Сделаем все своими руками!

Ставим mysql из портов

cd /usr/ports/databases/mysql51-server/
make install clean
mysql_install_db
chown –R mysql:mysql /var/db/mysql
echo mysql_enable=YES &#62;&#62; /etc/rc.conf
/usr/local/etc/rc.d/mysql-server start

Дальше запускаем консоль командой mysql

UPDATE mysql.user SET Password=PASSWORD('NEWROOTPASSWORD') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';
DROP [...]]]></description>
			<content:encoded><![CDATA[<p>В большинстве пакетов mysql-server под Linux входи хороший скрипт mysql_secure_installation, которого очень не хватает в порте mysql во FreeBSD. Сделаем все своими руками!<br />
<span id="more-524"></span><br />
Ставим mysql из портов</p>
<pre class="brush: plain;">
cd /usr/ports/databases/mysql51-server/
make install clean
mysql_install_db
chown –R mysql:mysql /var/db/mysql
echo mysql_enable=YES &gt;&gt; /etc/rc.conf
/usr/local/etc/rc.d/mysql-server start
</pre>
<p>Дальше запускаем консоль командой mysql</p>
<pre class="brush: sql;">
UPDATE mysql.user SET Password=PASSWORD('NEWROOTPASSWORD') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';
DROP DATABASE test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
exit
</pre>
<p>Что мы сделали? В порядке выполнения команд получается так:</p>
<li>Установили новый пароль root &#8211; NEWROOTPASSWORD</li>
<li>Удалили анонимных пользователей</li>
<li>Запретили удаленное подключение root</li>
<li>Физически удалили базу test</li>
<li>Удалили все записи о ней в служебной базе mysql</li>
<li>Перечитали служебные данные о правах пользователей</li>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/524/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql – быстрый заход в консоль.</title>
		<link>http://mysyslog.ru/posts/226</link>
		<comments>http://mysyslog.ru/posts/226#comments</comments>
		<pubDate>Mon, 21 Sep 2009 12:40:18 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Советы]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=226</guid>
		<description><![CDATA[Многие люди используют для управления базами или phpmyadmin или другие GUI программы. Я же предпочитаю консольную программу mysql. У того же phpmyadmin есть хорошее качество любого web приложения — оно может запоминать логин и пароль от базы, что очень удобно. Но и для консольной программы есть возможность организовать «быстрый» вход. При запуск mysql (и другие [...]]]></description>
			<content:encoded><![CDATA[<p>Многие люди используют для управления базами или phpmyadmin или другие GUI программы. Я же предпочитаю консольную программу mysql. У того же phpmyadmin есть хорошее качество любого web приложения — оно может запоминать логин и пароль от базы, что очень удобно. Но и для консольной программы есть возможность организовать «быстрый» вход. При запуск mysql (и другие консольные программы из набора поставки mysql) просматривает домашний каталог пользователя в поисках файла .my.cnf, в котором могут быть какие-то настройки переменных сессии. В нем же можно задать и логин/пароль. Делается это в разделе [client]:</p>
<p>[client]<br />
user=root<br />
password=ifdJhfhb4n</p>
<p>Теперь все консольные программы будут автоматически подставлять логин и пароль из этого файла. Конечно же такая настройка понижает безопасность сервера mysql, потому необходимо позаботиться об безопасности файла. В данном случае используется учетная запись root и для сервера mysql и сервера как такового:</p>
<p># chown -R root /root<br />
# chmod -R 700 /root<br />
# ls -la /root<br />
…<br />
-rwx&#8212;&#8212;  1 root root       27 May  1 23:15 .my.cnf</p>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/226/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql — настройка после установки.</title>
		<link>http://mysyslog.ru/posts/223</link>
		<comments>http://mysyslog.ru/posts/223#comments</comments>
		<pubDate>Mon, 21 Sep 2009 12:38:16 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Советы]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=223</guid>
		<description><![CDATA[Как правило, сразу после установки mysql&#8230; сразу начинают использовать. Но настройки «из коробки» подходят для небольших проектов с небольшой интенсивностью относительно простых запросов. Отсюда низкая производительность базы. А ведь достаточно поменять всего несколько настроек, чтобы ситуация изменилась кардинально. Сразу оговорюсь, речь будет идти в первую очередь про MyISAM, так как именно этот тип таблицы до [...]]]></description>
			<content:encoded><![CDATA[<p>Как правило, сразу после установки mysql&#8230; сразу начинают использовать. Но настройки «из коробки» подходят для небольших проектов с небольшой интенсивностью относительно простых запросов. Отсюда низкая производительность базы. А ведь достаточно поменять всего несколько настроек, чтобы ситуация изменилась кардинально. Сразу оговорюсь, речь будет идти в первую очередь про MyISAM, так как именно этот тип таблицы до сих пор используется наиболее часто (отчасти тут виноваты и настройки по умолчанию — именно этот движок таблиц установлен изначально для создания таблиц без указания типа).<br />
<span id="more-223"></span><br />
Первым пунктом при редактировании my.cnf будет кеш запросов, по умолчанию размер кеша запросов равен нулю, что равнозначно отключению оного. В некоторых дистрибутивах сборка mysql идет с отличающимся от дефолтного конфигурационным файлом, но проверить параметр в любом случае стоит. </p>
<p>query_cache_size=64M</p>
<p>Такое значение подойдет для большинства серверов mysql, на нагруженных серверах можно его еще несколько увеличить. По опыту на сервер с несколькими тысячами баз значение в 128М было более чем подходящим. </p>
<p>Следующий этап установка размеров временных таблиц. При выполнении JOIN и ряда других операций база данных создает временные объеденные таблицы. Создаваться такие таблицы могут как в памяти так и на жестком диске. Естественно при использовании жесткого диска запрос выполняется намного медленнее, чтобы этого избежать нужно выставить достаточный размер временных таблиц.</p>
<p>max_heap_table_size=32M<br />
tmp_table_size=32M</p>
<p>Значений в 32М более чем достаточно. Указать нужно именно две переменные, так как размер временной таблицы в памяти определяется меньшей из  max_heap_table_size и tmp_table_size. Для создания временных таблиц в памяти mysql использует движок MEMORY, как раз максимальный размер MEMORY таблиц и определяется max_heap_table_size. tmp_table_size используется при определении движка, который будет использоваться для временных таблиц. Если таблица помещается в tmp_table_size и меньше max_heap_table_size — будет использоваться MEMORY, если нет — будет использоваться MYISAM на жестком диске.</p>
<p>Самый важный параметр для MyISAM – размер памяти, выделяемый для хранения индексов. Индексы (или ключи) по своему назначению аналогичны оглавлению книги. С их помощью можно найти нужную страницу без просмотра всего содержимого книги. Что во много раз ускоряет выполнение запросов. Но индексы — это тоже файлы, которые нужно читать с диска, что долго. И чтобы оптимизировать этот процесс MyISAM выделяет отдельный буфер в памяти, в который сохраняет значения уже прочитанных индексов. Т.е. при следующем обращении к этому индексу жесткий диск уже не будет задействован, что во много раз повышает скорость выполнения запроса. </p>
<p>Размер буфера под хранение индексов MyISAM очень легко определить — достаточно определить их размер на файловой системе. MyISAM хранит индексы в файлах с расширением .MYI, сумма размеров всех файлов индексов во всех базах даст идеальный размер буфера в памяти. Подсчитать общий размер очень просто. </p>
<p>Первым делом определяем каталог с базами, для этого в консоли mysql вводим:<br />
mysql> SHOW VARIABLES LIKE ‘datadir’;</p>
<p>Переходим в указанный каталог и считаем общий размер всех файлов:<br />
# cd /var/lib/mysql/<br />
# du -ch */*.MYI<br />
…<br />
54M	total<br />
Т.е. 54М будет достаточно, чтобы поместить все индексы в базу, можно взять 64 Мб с небольшим запасом на рост. 64М легко выделить почти на любой системе. Как же быть с базами, у которых индексы занимают несколько Гб? На 32х битных системах в этом плане все совсем плохо из-за ограничения по памяти в 4Гб (даже PAE не решает вопрос, так как остается ограничение на максимальный размер процесса в памяти, а mysql процесс монолитный).<br />
Опишу наиболее плохой сценарий использования буфера под индексы. Представьте ситуацию, сервер выполнил редкий запрос, который потребовал считать достаточно много индексов с диска. MyISAM не может точно определить, будут ли эти индексы использоваться впредь, потому «на всякий случай» помещает их в буфер под хранение индексов. Но для их хранения приходится вытеснять из памяти индексы других запросов, которые могут выполняться куда чаще. В результате, серверу пришлось прочитать с диска индексы для этого редкого запроса, да еще потом считать с диска индексы часто используемых запросов, которые были вытеснены этим большим и редким запросом.<br />
Чтобы избежать чрезмерного числа операций чтения жесткого диска MyISAM использует механизм разделения буфера памяти индексов на “горячий” и “холодный”. При первом чтении индекса он попадает в холодный кеш. Если индекс используется еще раз, то он перемещается в горячий кеш. Если памяти не хватает, то вытесняются только те значения индексов, которые находятся в холодной части кеша. Т.е. часто используемые индексы остаются в памяти.<br />
Размер буфера под индексы определяется переменной key_buffer_size, процентное разделение на холодный и горячий буферы задается key_cache_division_limit.<br />
key_buffer_size=128M<br />
key_cache_division_limit=70</p>
<p>Как правило, для небольших и средних сайтов (и соответственно баз mysql) хватает 128M под буфер индексов, key_cache_division_limit=70 — выделяет 70% под горячий кеш и 30% пол холодный из общего объема буфера индексов.<br />
Вот этих пяти переменных достаточно, чтобы значительно улучшить работу сервера MySQL: значительно снизить нагрузку на диски и вместе с тем ускорить выполнение запросов во много раз. </p>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/223/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RAMFS и TMPFS в Linux</title>
		<link>http://mysyslog.ru/posts/216</link>
		<comments>http://mysyslog.ru/posts/216#comments</comments>
		<pubDate>Mon, 21 Sep 2009 11:56:35 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Советы]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=216</guid>
		<description><![CDATA[Жесткие диски — одна из самых медленных подсистем компьютера, иногда его пропускной способности очень не хватает. Выход — использовать диски в памяти. Для этого выделяется область памяти, в которую можно записывать файлы или считывать из нее файлы, как с обычного раздела жесткого диска. Но так операции записи/чтения происходят в памяти, то такой «дисковый раздел» по [...]]]></description>
			<content:encoded><![CDATA[<p>Жесткие диски — одна из самых медленных подсистем компьютера, иногда его пропускной способности очень не хватает. Выход — использовать диски в памяти. Для этого выделяется область памяти, в которую можно записывать файлы или считывать из нее файлы, как с обычного раздела жесткого диска. Но так операции записи/чтения происходят в памяти, то такой «дисковый раздел» по настоящему быстр.<br />
В Linux есть две реализации дисков в память: tmpfs и ramfs. По сути они делают одно и тоже, но есть различия в их работе, которые нужно знать и учитывать при выборе.<br />
Как создать диск в памяти? Сперва нужно создать каталоги для монтирования, потом создать диски в памяти<br />
# mkdir /mnt/tmpfs /mnt/ramfs<br />
# mount -t tmpfs -o size=100m tmpfs /mnt/tmpfs<br />
# mount -t ramfs -o size=100m ramfs /mnt/ramfs<br />
Если запустить mount, то мы увидим среди прочего<br />
# mount<br />
&#8230;<br />
tmpfs on /mnt/tmpfs type tmpfs (rw,size=100m)<br />
ramfs on /mnt/ramfs type ramfs (rw,size=100m)<br />
Все очень похоже, но в чем тогда разница? При записи небольших файлов вы никогда ее и не заметите, но при больших объемах данных разница принципиальна.<br />
Ramfs увеличивается динамически. Т.е. Если вы выделили 20 мегабайт под раздел tmpfs и попробуете записать 21 мегабайт, то у вас ничего не получится, будет выдано сообщение о нехватке места, а ramfs спокойно затребует нужное место из памяти. Причем, если у вас 4 Гб памяти, то при заполнении раздела ramfs в 4Гб скорее всего весь сервер зависнет.<br />
Еще одна важная особенность, tmpfs использует swap, т.е. если физической памяти сервера не хватает, то tmpfs потеряет все свои плюсы.  Ramfs напротив использует исключительно физическую память.</p>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/216/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Еще один важный параметр работы MySQL</title>
		<link>http://mysyslog.ru/posts/164</link>
		<comments>http://mysyslog.ru/posts/164#comments</comments>
		<pubDate>Tue, 07 Apr 2009 08:33:03 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Советы]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=164</guid>
		<description><![CDATA[При записи, удалении или изменении таблиц mysql, СУБД выполняет блокировку таблицы, чтобы не повредить данные. Если блокировки выполняются долго &#8211; то это проблема. Т.е. запросы на изменения данных будут происходить дооолго.
Для того, чтобы посмотреть, были ли задержки при выполнении блокировок,нужно выполнить такой запрос: 

mysql> show status like 'Table_locks_%';
+-----------------------+---------+
&#124; Variable_name       [...]]]></description>
			<content:encoded><![CDATA[<p>При записи, удалении или изменении таблиц mysql, СУБД выполняет блокировку таблицы, чтобы не повредить данные. Если блокировки выполняются долго &#8211; то это проблема. Т.е. запросы на изменения данных будут происходить дооолго.<br />
Для того, чтобы посмотреть, были ли задержки при выполнении блокировок,нужно выполнить такой запрос: </p>
<pre lang="sql">
mysql> show status like 'Table_locks_%';
+-----------------------+---------+
| Variable_name         | Value   |
+-----------------------+---------+
| Table_locks_immediate | 2473395 |
| Table_locks_waited    | 459     |
+-----------------------+---------+
</pre>
<p>Если <strong>Table_locks_waited</strong> очень большое, то нужно что-то делать. Как вариант, если используется MyISAM, переходить на InnoDB. MyISAM блокирует изменяемую таблицу целиком, а InnoDB блокирует только изменяемую строку, а не таблицу целиком, что намного эффективнее при большой интенсивности изменений в базе. </p>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/164/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Настройка производительности MySQL (MyISAM)</title>
		<link>http://mysyslog.ru/posts/52</link>
		<comments>http://mysyslog.ru/posts/52#comments</comments>
		<pubDate>Sat, 03 Jan 2009 12:51:32 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Советы]]></category>
		<category><![CDATA[dba]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=52</guid>
		<description><![CDATA[
В свое время я достаточно долго искал в интернете внятное описание тюнинга производительности mysql и ничего подходящего не находил. На mysql.com главы документации о производительности носят скорее декларативный характер &#8211; &#8220;Сделайте так, и все будет хорошо&#8221; &#8211; без описание почему именно такие значения нужно выставить. Сейчас ситуация несколько меняется, появляются статьи о правильной настройке с [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="mysql" src="http://mysql.com/common/logos/logo_mysql_sun_a.gif" alt="" width="114" height="68" /><br />
В свое время я достаточно долго искал в интернете внятное описание тюнинга производительности mysql и ничего подходящего не находил. На <a href="http://mysql.com">mysql.com</a> главы документации о производительности носят скорее декларативный характер &#8211; &#8220;Сделайте так, и все будет хорошо&#8221; &#8211; без описание почему именно такие значения нужно выставить. Сейчас ситуация несколько меняется, появляются статьи о правильной настройке с объяснениями, похоже в основном благодаря книге <a href="http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/0596101716/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1230980722&amp;sr=8-1">High Performance MySQL</a>. Этой публикацией я открываю небольшой цикл статей, призванных помочь системным администраторам и web-мастерам настраивать mysql.</p>
<p><span id="more-52"></span><br />
Один из самых важных параметров с точки производительности MyISAM &#8211; key_buffer_size. Во всех рекомендациях советуют отдавать под него 30-40% процентов физической памяти. Правда почти нигде не рассказывается почему именно так. Попробую ответить на этот вопрос.<br />
Переменная key_buffer_size определяет какой размер индексов можно поместить в оперативную память (кеш). MyISAM хранит индексы в отдельных файлах с расширением .MYI, т.е. для того, чтобы воспользоваться индексами mysql должна открыть и прочитать один из файлов .MYI. Нужно напомнит, что IO операции с дисками крайне медленны по сравнению, например, с оперативной памятью. Потому снижение числа дисковых IO операций &#8211; основная стратегия повышения производительности в любом высоконагруженном приложении, не только в СУБД. Mysql, следуя стратегии уменьшения IO операций, прочитав индекс из файла, помещает полученное значение в оперативную память. В случае если этот индекс потребуется еще раз, mysql его считает уже из кеша, что значительно быстрее. Если память под индексы достигла размера key_buffer_size, то mysql удалит старые данные из кеша. Т.е. если удаленные данные опять потребуются, их придется читать с диска. Из этого легко сделать вывод, что идеальным вариантом будет поместить все индексы в память. Но сколько памяти под индексы нужно? Индексы хранятся в файлах размер которых можно подсчитать. Конечно же нужно помнить, что размер индексов будет меняться во времени.<br />
Подсчитать размер файлов индексов очень просто. Для этого нужно перебраться в каталог со всеми базами. Подсмотреть имя каталога можно так:</p>
<pre lang="sql">mysql&gt; show variables like 'datadir';</pre>
<p>Далее выполняем du:</p>
<pre lang="bach"># cd /var/lib/mysql/
# du -ch */*.MYI
...
54M    total</pre>
<p>Т.е. сейчас под индексы хватит 64 Мб с небольшим запасом на рост. Это очень хороший результат, так как все индексы без проблем помещаются в память. 64М легко выделить почти на любой системе. Как же быть с базами, у которых индексы занимают несколько Гб? На 32х битных системах в этом плане все совсем плохо из-за ограничения по памяти в 4Гб. Для таких систем может пригодиться система разделения на горячий и холодный кеш. Представьте ситуацию, сервер выполнил редкий запрос, который потребовал считать достаточно много индексов с диска. Для их хранения пришлось вытеснить из памяти индексы других запросов, которые могут выполняться куда чаще. В результате, серверу пришлось прочитать с диска индексы для этого редкого запроса, да еще потом считать с диска все вытесненные им из кеша индексы&#8230;<br />
Чтобы избежать такой ситуации можно разделить кеш на &#8220;горячий&#8221; и &#8220;холодный&#8221;. При первом чтении индекса он попадает в холодный кеш. Если индекс используется еще раз, то он перемещается в горячий кеш. Если памяти не хватает, то вытесняются только те значения индексов, которые находятся в холодной части кеша. Т.е. часто используемые индексы остаются в памяти. Соотношение между горячим и холодным кешами задается переменной key_cache_division_limit. По умолчанию, key_cache_division_limit = 100, т.е. существует только горячий кеш.<br />
На 64x битной системе казалось бы проблемы с памятью под индексы не должно быть. Главное, чтобы было достаточно физической памяти. Но в mysql до версии 5.1 размер кеша ограничен 4Гб. Похоже это баг, который судя по всему так и не исправили в боле ранних версиях. Вы знаете много людей, перешедших в продакшене на mysql 5.1? Я нет. Многие продолжают использовать 4.1. Обойти это ограничение на 64х битных машинах можно. Для этого есть именованные индексы. Можно создать отдельные индексы для каких-то конкретных таблиц таким образом суммарный объем памяти под индексы быдет состоять из общего буфера и именованных кешей, которые в сумме могут быть больше чем 4Гб. Для создания именованного кеша key_buffer_1 нужно отредактировать my.cnf, добавив в него строчку:</p>
<pre lang="bash">key_buffer_1.key_buffer_size = "32M"</pre>
<p>После этого нужно определить для каких таблиц будет использоваться этот кеш, в нашем примере это таблицы t1 и t2:</p>
<pre lang="sql">CACHE INDEX t1,t2 IN key_buffer_1;</pre>
<p>Разделение на несколько кешей помимо основного буфера позволяет решить проблему с вытеснением индексов из памяти. Можно создать отдельные буфера в памяти для наиболее часто используемых таблиц.<br />
Есть еще одна хитрость, любой индекс перед тем как попасть в кеш должен быть считан с диска, что может быть совершенно лишним в момент &#8220;боевой&#8221; работы сервера. Этого можно избежать, загрузив все индексы в момент старта сервера. Главное, чтобы памяти хватило. Делается это командой:</p>
<pre lang="sql"> LOAD INDEX INTO CACHE t1,t2</pre>
<p>Как понять что все плохо? Т.е. плохо в данном случае &#8211; это когда слишком много чтений ключей с диска. Данные о чтении индексов из памяти или с дисков можно посмотреть так:</p>
<pre lang="sql">mysql&gt; show global status like 'key_read%';
Variable_name Value

Key_read_requests 132
Key_reads 3</pre>
<p>Key_read_requests &#8211; чтения из памяти.<br />
Key_reads &#8211; чтение с дисков<br />
Можно использовать эту формулу, чтобы определить процент запросов к дискам: <code>100 - ( Key_read_requests * 100) / ( Key_reads + Key_read_requests )</code><br />
Чем ближе это значение к 0, тем лучше для производительности. Но с этими данными нежно обращаться осторожно, как и с любыми относительными вычислениями. 0,1 процента запросов к диску на разных системах могут очень сильно отличаться по своей сути. На одном сервер это будет одно обращение в час, а на другом десятки и сотни в секунду.<br />
Потому нужно отслеживать и абсолютные значения. Хорошим вариантом будет отслеживать число запросов к дискам в секунду в моменты пиковой нагрузки на сервер. Для этого нужно посмотреть значение Key_reads в разные моменты времени. Пусть пиковыми часами нагрузки у нас является промежуток между 12тью и 15 часами дня. Тогда нужно замерить значение  Key_reads в 12 часов, и еще раз в 15 часов. Их разница поделенная на число секунд в трех часах даст значение обращений к дискам в секунду. Далее полученное число можно сравнить производительностью дисков, но это уже совсем другая история.</p>
<p>&#8211;<br />
Для подготовки этой стати использовались материалы из книги <a href="http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/0596101716/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1230980722&amp;sr=8-1">High Performance MySQL</a>, сайтов <a href="http://sqlinfo.ru/articles/info/3.html">sqlinfo.ru</a> и <a href="http://mysqlperformanceblog.com">mysqlperformanceblog.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/52/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
