Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Оптимизация в MySQL /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Оптимизация сервера MySQL - Программирование от RIN.RU
Оптимизация сервера MySQL



Как MySQL использует DNS


Когда к mysqld подключается новый клиент, mysqld выделяет новый поток для обработки данного запроса. Этот поток вначале проверяет, имеется ли в кэше имен хостов имя требуемого хоста. Если нет, то поток вызовет функции gethostbyaddr_r() и gethostbyname_r(), чтобы определить имя хоста.


Если операционная система не обеспечивает вышеописанные вызовы с поддержкой потоков, то данный поток заблокирует флаг и вызовет вместо этого функции gethostbyaddr() и gethostbyname(). Следует учитывать, что в таком случае никакой другой поток не сможет определять имена других хостов, отсутствующих в кэше имен хостов, пока первый поток не будет готов.


Можно заблокировать поиск DNS хоста, запустив mysqld с параметром --skip-name-resolve. В этом случае, однако, в таблицах привилегий MySQL можно использовать только IP-адреса.


Если процесс установления DNS очень медленный и хостов очень много, то можно получить более высокую производительность либо путем блокировки поиска DNS при помощи --skip-name-resolve, либо увеличив размер определения HOST_CACHE_SIZE (по умолчанию: 128) и перекомпилировав mysqld.


Заблокировать кэш имен хостов можно с помощью --skip-host-cache. Можно также очистить этот кэш с помощью команды FLUSH HOSTS или mysqladmin flush-hosts.


Можно запретить соединения по протоколу TCP/IP, запустив mysqld с опцией --skip-networking.


Синтаксис команды SET


SET [OPTION] SQL_VALUE_OPTION= value, ...


Команда SET OPTION устанавливает различные опции, влияющие на работу сервера или клиента. Действие любой установленной опции продолжается до конца текущего сеанса или до тех пор, пока не будет установлено другое значение этой опции.


CHARACTER SET character_set_name | DEFAULT

Преобразует все строки, передающиеся от клиента, и строки передающиеся клиенту, в соответствии с заданным набором символов. В настоящее время единственной опцией для character_set_name является cp1251_koi8, но можно легко добавить новые наборы символов, отредактировав файл sql/convert.cc в дистрибутиве исходного кода MySQL. Чтобы восстановить установку по умолчанию, следует установить значение character_set_name в DEFAULT.
Следует учитывать, что синтаксис установки опции CHARACTER SET отличается от синтаксиса установки других опций.

PASSWORD = PASSWORD("некий пароль")

Устанавливает пароль для текущего пользователя. Любой не анонимный пользователь может изменить свой собственный пароль!

PASSWORD FOR user = PASSWORD("некий пароль")

Устанавливает пароль для особого пользователя для текущего серверного хоста. Это может сделать только пользователь, имеющий доступ к базе данных mysql. Данный пользователь должен быть представлен в формате user@hostname, где user и hostname в точности соответствуют записям этих позиций в столбцах User и Host в таблице mysql.user. Например, если записи в полях User и Host соответственно были bob и %.loc.gov, то необходимо писать:


mysql> SET PASSWORD FOR bob@"%.loc.gov" = PASSWORD("newpass");


или


mysql> UPDATE mysql.user SET password=PASSWORD("newpass")
-> WHERE user="bob" AND host="%.loc.gov";


SQL_AUTO_IS_NULL = 0 | 1

Если установить в 1 (значение по умолчанию), то можно найти последнюю внесенную строку для таблицы со столбцом AUTO_INCREMENT с помощью следующей конструкции: WHERE auto_increment_column IS NULL. Эта возможность используется некоторыми ODBC-программами, такими как Access.

AUTOCOMMIT = 0 | 1

Если установить в 1, то все изменения в таблицу будут вноситься немедленно. Чтобы начать многокомандную транзакцию, необходимо использовать команду BEGIN (см. раздел Синтаксис команд BEGIN/COMMIT/ROLLBACK). Если установить данную опцию в 0, то необходимо использовать COMMIT / ROLLBACK для того, чтобы принять/отменить эту транзакцию (см. раздел Синтаксис команд BEGIN/COMMIT/ROLLBACK). Следует учитывать, что при переходе из режима работы без AUTOCOMMIT в режим AUTOCOMMIT MySQL автоматически выполнит COMMIT для любой открытой транзакции.

SQL_BIG_TABLES = 0 | 1

Если установить в 1, то предпочтительным местом хранения всех временных таблиц будет диск, а не оперативная память. Это вызовет некоторое
замедление работы, зато для больших операций SELECT, требующих обширных временных таблиц, не будет выдаваться ошибка The table tbl_name is full. Для нового соединения значение этой величины по умолчанию равно 0 (т.е. использовать для временных таблиц оперативную память).

SQL_BIG_SELECTS = 0 | 1

При установке в 0 MySQL будет прерывать выполнение запроса, если поступившая команда SELECT может потребовать слишком много времени для выполнения. Такая возможность полезна при нерационально написанном выражении WHERE. Запрос классифицируется как слишком большой, если команда SELECT, возможно, будет обрабатывать больше строк, чем задано в max_join_size. Для нового соединения значение по умолчанию равно 1 (т.е. разрешаются любые команды SELECT).

SQL_BUFFER_RESULT = 0 | 1

SQL_BUFFER_RESULT будет заносить результат выполнения команд SELECT во временную таблицу. Это поможет MySQL раньше освободить блокировки таблиц и окажется полезным в случаях, когда требуется значительное время для пересылки результирующего набора данных клиенту.

SQL_LOW_PRIORITY_UPDATES = 0 | 1

При установке в 1 все команды INSERT, UPDATE, DELETE и LOCK TABLE WRITE будут ожидать, пока не будет ни одной ожидающей решения команды SELECT или LOCK TABLE READ на обрабатываемой таблице.

SQL_MAX_JOIN_SIZE = value | DEFAULT

Запрещает команды SELECT, которым, возможно, придется обрабатывать более, чем value комбинаций строк. Установив эту величину, можно определить команды SELECT, в которых ключи используются неправильно и которые, возможно, потребуют длительного времени для исполнения. При установке этой опции в величину, отличную от DEFAULT, сбрасывается флаг SQL_BIG_SELECTS. Если вновь установить флаг SQL_BIG_SELECTS, то переменная SQL_MAX_JOIN_SIZE будет игнорироваться. Значение по умолчанию для этой переменной можно установить, запустив mysqld с -O max_join_size=#. Следует учитывать, что если результат запроса всегда находится в кэше запросов, то упомянутая выше проверка выполняться не будет. Вместо этого MySQL будет отсылать результат клиенту, поскольку результат запроса уже вычислен и отсылка его клиенту не создаст нагрузки для сервера.

SQL_QUERY_CACHE_TYPE = OFF | ON | DEMAND


SQL_QUERY_CACHE_TYPE = 0 | 1 | 2

Определяет установку кэша запросов для данного потока.


Опция Описание
0 or OFF Не кэшировать или не извлекать результаты
1 or ON Кэшировать все результаты за исключением запросов SELECT SQL_NO_CACHE ...
2 or DEMAND Кэшировать только запросы SELECT SQL_CACHE ...

SQL_SAFE_UPDATES = 0 | 1

Если установить в 1, то MySQL будет прерывать выполнение поступивших команд UPDATE или DELETE, в которых не используется ключ или LIMIT в выражении WHERE. Это позволяет обнаружить ошибочные обновления при ручном создании команд SQL.

SQL_SELECT_LIMIT = value | DEFAULT

Максимальное количество записей, возвращаемых командой SELECT. Если SELECT содержит выражение LIMIT, то LIMIT превосходит по старшинству величину в SQL_SELECT_LIMIT. Для нового соединения значение по умолчанию равно "unlimited". Если предел был изменен, то его можно вернуть в значение по умолчанию указанием величины DEFAULT в выражении SQL_SELECT_LIMIT.

SQL_LOG_OFF = 0 | 1

При установке в 1 для данного клиента в стандартный журнал не будут заноситься никакие записи, если клиент имеет привилегии SUPER. Это не относится к журналу обновлений!

SQL_LOG_UPDATE = 0 | 1

При установке в 0 для данного клиента в журнал обновлений не будут заноситься никакие записи, если клиент имеет привилегии SUPER. Это не относится к стандартному журналу!

SQL_QUOTE_SHOW_CREATE = 0 | 1

При установке этой опции в 1 SHOW CREATE TABLE будет заключать в кавычки имена таблиц и столбцов. Имеет значение Включено по умолчанию, чтобы работала репликация таблиц с изощренными именами столбцов (см. этот раздел SHOW CREATE TABLE).

TIMESTAMP = timestamp_value | DEFAULT

Устанавливает время для данного клиента. Применяется для получения первоначальной временной метки при использовании журнала обновлений для
восстановления строк. Переменная timestamp_value должна представлять системное время Unix, а не временную метку MySQL.

LAST_INSERT_ID = #

Устанавливает величину, возвращаемую функцией LAST_INSERT_ID(). Хранится в журнале обновлений при использовании функции LAST_INSERT_ID() в команде, обновляющей таблицу.

INSERT_ID = #

Устанавливает величину, которую следует использовать в следующей команде INSERT или ALTER TABLE при внесении величины AUTO_INCREMENT. В основном используется с журналом обновлений.


См. раздел Синтаксис команды SET TRANSACTION.

<<<  Назад
 1  2  3  4  5 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Oбзор оптимизации

Оптимизация SELECT и других запросов

Вопросы блокировок

Оптимизация структуры базы данных

Вопросы, относящиеся к диску

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь