» Главная
eXcode.ru » Статьи » Базы данных
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 11





Администрирование пакета




Администрирование пакета

  • Предоставление доступа к базам данных
  • Как работают пароли
  • Запуск mysqld (при загрузке системы)
  • Запуск mysqld (при запущенной системе)
  • Опции, задаваемые при компиляции пакета
  • Выключение альтернативных пользовательских логинов
  • Выключение автоматического присваивания значений по умолчанию
  • Изменение используемой длины ключа
  • Изменение порядка сортировки
  • Добавление функций в MySQL
  • Быстрая загрузка данных
  • Настройка mysqld
  • Полезные замечания
    • Маленькие хитрости по улучшению производительности
    • Оптимизация запросов
    • Какая оптимизация выполняется для условия WHERE?
    • Оптимизация памяти, используемой таблицами
    • Несоответствия типов в INSERT
  • О чем говорит номер версии MySQL
  • Протокол "клиент-сервер"
    • Обозначения
    • Детальное описание
    • Типы пакетов
    • :ok
    • :error
    • :command
    • :query
    • :data
  • Подробно о таблицах
  • Ключи и все о них
  • MySQL: планы на будущее
  • Потоки в Linux

 

Предоставление доступа к базам данных

СУБД MySQL использует специальную базу данных для предоставления прав доступа к своим базам данных. Эти права могут базироваться на именах серверов и/или пользователей и предоставляться для одной или нескольких баз данных

Пользовательские аккаунты могут быть снабжены паролями. При обращении к базе данных, пароль шифруется. Поэтому он не может быть перехвачен и использован посторонним (это мнение автора СУБД...).

СУБД MySQL имеет три таблицы, а именно:

База данных: mysql Таблица: db

База данных: mysql Таблица: db

Поле

Тип

Null

Ключ

Умолчание

Extra

Хост

char(60)

 

PRI

   

Db

char(32)

 

PRI

   

Пользователь

char(16)

 

PRI

   

Select_priv

char(1)

   

N

 

Insert_priv

char(1)

   

N

 

Update_priv

char(1)

   

N

 

Delete_priv

char(1)

   

N

 

Create_priv

char(1)

   

N

 

Drop_priv

char(1)

   

N

 

 

База данных: mysql Таблица: host

Поле

Тип

Null

Ключ

Умолчание

Extra

Хост

char(60)

 

PRI

   

Db

char(32)

 

PRI

   

Select_priv

char(1)

   

N

 

Insert_priv

char(1)

   

N

 

Update_priv

char(1)

   

N

 

Delete_priv

char(1)

   

N

 

Create_priv

char(1)

   

N

 

Drop_priv

char(1)

   

N

 

База данных: mysql Таблица: user

База данных: mysql Таблица: user

Поле

Тип

Null

Key

Умолчание

Extra

Хост

char(60)

 

PRI

   

Пользователь

char(16)

 

PRI

   

Пароль

char(8)

       

Select_priv

char(1)

   

N

 

Insert_priv

char(1)

   

N

 

Update_priv

char(1)

   

N

 

Delete_priv

char(1)

   

N

 

Create_priv

char(1)

   

N

 

Drop_priv

char(1)

   

N

 

Reload_priv

char(1)

   

N

 

Shutdown_priv

char(1)

   

N

 

Process_priv

char(1)

   

N

 

File_priv

char(1)

   

N

 

Пример добавления новых пользователей:

$ mysql mysql
mysql> INSERT INTO user VALUES (′%′,′monty′,password(′something′),
    -> ′Y′,′Y′,′Y′,′Y′,′Y′,′Y′,′Y′,′Y′,′Y′,′Y′);
mysql> INSERT INTO user (host,user,password) values(′localhost′,′dummy′,′′);
mysql> INSERT INTO user VALUES
(′%′,′admin′,′′,′N′,′N′,′N′,′N′,′N′,′N′,′Y′,′N′,′Y′,′N′);
mysql> quit
$ mysqladmin reload

Добавлено три новых пользователя (юзверя):

monty: Суперпользователь (администратор), должен использовать пароль, для работы с mysql.

dummy: Должен быть допущен к индивидуальной базе данных по таблице ′db ′.

admin: Не нуждается в пароле, но разрешено выполнение только команд ′mysqladmin reload′ and ′mysqladmin processlist′. Может быть допущен к индивидуальной базе данных через таблицу ′db′.

ВНИМАНИЕ! Вы ДОЛЖНЫ использовать функцию password() при создании пользователя, имеющего пароль. СУБД MySQL ожидает получить зашифрованный пароль.

Атрибуты, установленные в таблице пользователей перекрывают атрибуты, установленные в таблице DB. Если сервер поддерживает много баз данных, лучше создавать пользователей без прав доступа в таблице пользователей и назначать им права доступа к базе данных по таблице db.

Если Вы используете MIT threads package, обратите внимание, что имя localhost не будет работать, так как MIT threads package не поддерживает socket-подключения. Это означает, что Вы должны всегда определять ваш hostname (имя сервера) при подключении, даже если Вы работаете с одним и тем же сервером.

Следует помнить следующие правила при настройке прав доступа:

  • Имя сервера и поля в таблице db могут содержать регулярные выражения языка SQL: символы % и _. В других полях использовать их нельзя.
  • Имя сервера может быть доменным именем, именем localhost, IP адресом или SQL выражением. Пустое поле "имя сервера" означает любой сервер.
  • Поле db является именем базы данных или SQL выражением.
  • Пустое имя пользователя эквивалентно любому пользователю.
  • Пустой пароль эквивалентен любому паролю. Вы можете создать суперпользователя (super-user) установив все права для него в ′Y′ в таблице пользователей при создании этого аккаунта. Этот пользователь сможет делать что угодно, не считаясь со значениями, установленными в таблице DB!
  • Таблица серверов проверяется только когда в таблице db поле "имя сервера" пустое.
  • Все таблицы, по возможности, сортируются в порядке host-user-db.

Пользователь

Сортируется по именам серверов и пользователей.

db

Сортируется по именам серверов, пользователей и баз данных.

Сервер

Сортируется по именам серверов и баз данных.

Начиная с версии 3.20.19 сервера введена еще одна хитрость, для попытки вычислить, как данный пользователь обратится к данной базе данных. Допустим существование пользователя с именем Джо, который зарегистрирован так: < ?N?,?N?,?N?,?N?,?N?,?N?,?N?); ?N?,?N?,?N?, VALUES(?%.external.domain.com?,??,??, user INTO INSERT

Проверка таблицы баз данных будет выполнена для пользователя ′′ (пустое имя), а не для пользователя Джо, даже если пользователь, Джо имеет запись в таблице доступа к базам данных (db таблице).

Создание пользовательских аккаунтов - вероятно, наиболее путающий аспект СУБД MySQL, (особенно, если никогда не имел с ней дела), так что не удивляйтесь, если потребуется некоторое время, чтобы во всем разобраться и получить парочку несколько неприятных сюрпризов. Использование программы mysqlaccess делает управление доступом несколько более ясным.

Вообще лучше избегать использования регулярных выражений SQL в полях имени сервера. Это упрощает отладку.

Конкретно, установите все поля "имя сервера" в ′%′ и очистите таблицу серверов. Как только все начнет нормально функционировать, можно начинать эксперименты с добавлением имен серверов в таблицу серверов в случае такой необходимости.

Если получено сообщение об ошибке ′Access denied′, то скорее всего вы нормально связались с демоном mysqld, но имеете неправильную информацию в вашей таблице пользователей.

Как работают пароли

Зашифрованный пароль сохраняется в таблице пользователей (′user ′).

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

 

Запуск mysqld (при загрузке системы)

Solaris

Скопируйте скрипт mysql.server из каталога mysql bin в /etc/init.d .

Проверьте все пути в скрипте mysql.server. Проверьте и установите safe_mysqld в /etc/init.d/mysql.server и в /etc/rc2.d/S99mysql.server .

Linux

В Caldera Open Linux надо добавить в файл /etc/rc.d/rc.local следующее:

/usr/local/bin/safe_mysql &

Конечно, здесь надо задать правильный путь в каталог с MySQL.

Запуск mysqld (при запущенной системе)

Программа mysqld может быть запущена от имени любого пользователя. По умолчанию она запускается от имени root. Если она запускается от имени любого другого пользователя, надо установить правильные права доступа ко всем необходимым файлам.

Зайдите в систему как пользователь-владелец MySQL и дайте следующую команду (Предполагается, что исполняемый модуль mysql находится в вашем пути. Если это не так, укажите полный путь):

safe_mysql &

 

Опции, задаваемые при компиляции пакета

Как и большая часть программ для unix, MySQL поставляется в виде исходного текста, который надо откомпилировать. Перед компиляцией можно произвести некоторую настройку пакета на уровне исходного текста.

Выключение альтернативных пользовательских логинов

Если вы не хотите, чтобы пользователи могли применять опцию -u для входа в mysql под другим логином, можно закомментировать в файле global.h строку:

#define SAFE_USER 1  /* Comment this if you are paranoid */

 

Выключение автоматического присваивания значений по умолчанию

По умолчанию MySQL автоматически назначит значение по умолчанию полям, которые явно не объявлены. MySQL будет делать это исходя из типа конкретного поля. Если Вы предпочли бы, чтобы поля с необъявленными значениями имели значение NULL, то добавьте в файл global.h строку:

#define DONT_USE_DEFAULT_FIELDS

 

Изменение используемой длины ключа

По умолчанию MySQL рассматривает только 1120 байтов ключа. Вы можете увеличивать это значение, редактируя файл nisam.h и изменяя значение N_MAX_KEY_LENGTH. Обратите внимание, что это может вести к снижению производительности. Нет причины делать это значение меньше, поскольку можно определить ключ, длина которого меньше указанного поля. Более подробно это рассмотрено в разделе "Ключи".

Изменение порядка сортировки

По умолчанию MySQL сортирует строки согласно ISO8859-1 (latin1). Вы можете изменить это во время конфигурации, определяя следующую опцию.

  --with-charset=[charset]

Где [charset] может быть один из: latin1, latin2, koi8_ru, dec8, dos, hp8, swe7, usa7.

Чтобы узнать о том, как добавлять новые наборы символов, посмотрите каталог строк в исходниках.

Обратите внимание: Если Вы меняете наборы символов уже создав базу данных, Вы будете должны выполнить isamchk с параметрами -e, и -q для всех таблиц, иначе MySQL не будет работать правильно.

Добавление функций в MySQL

Если Вы понимаете C++, и Yacc, то относительно просто добавить функцию к СУБД MySQL. Если не понимаете, то дело хуже.

Сначала добавьте строку в файл sql_lex.cc с именем функции в массив sql_functions.

Затем добавьте две строки в файл sql_yacc.y. Первая определяет символ препроцессора yacc. Вы должны добавить это к началу файла. Затем определите параметры функции, и создайте ′item′ с этими параметрами.

В файле item_func.h объявляют класс, который наследуется из Item_num_func или Item_str_func, в зависимости от того, возвращает ли ваша функция число или строку.

В intem_func.cc добавьте:

double *Item_func_newname::val()

если Вы определяете числовую функцию, или

String *Item_func_newname::Str(String *str)

если Вы определяете строковую функцию.

Для строковой функции вы должны также определить следующую функцию:

void Item_func_newname::fix_length_and_dec()

Она должна по крайней мере вычислить ′max_length′ основанный на полученных параметрах. max_length - максимальное число символов, которое функция может вернуть (максимальная длина возвращаемого значения).

Если функция не может возвращать null, Вы должны также установить ′maybe_null=0′.

Для строковых функций параметр ′String *str′, предоставляет буфер для хранения результата. Строковая функция должна вернуть строку, которая хранит результат.

Все строковые функции должны избегать выделения памяти больше, чем им абсолютно необходимо! Системные ресурсы не бесконечны...

Быстрая загрузка данных

Самый быстрый способ загружать данные в MySQL - команда LOAD DATA INFILE. Это в 3-20 раз быстрее, чем использование инструкций INSERT. Для еще большего количества быстродействия Вы можете использовать следующую процедуру, чтобы отключить формирование ключа на вашей таблице, в то время как данные загружаются. Для этого надо находиться в вашем MySQL каталоге баз данных, или обеспечивать полные пути к вашей базе данных.

isamchk -rq -k0 [имя_базы_данных]/[имя_таблицы]

Удаление ключей

LOAD DATA INFILE ...

Чтение Ваших данных

isamchk -rq [имя_базы_данных]/[имя_таблицы]

Создание ключей таблицы заново

mysqladmin reload.

Сообщите, чтобы mysql использовал новую таблицу

 

Настройка mysqld

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

$ mysqld -O

Возможные переменные в опции -O:

Имя

Значение по умолчанию

back_log

Определите размер очереди для входящих tcp/ip подключений. Убедитесь, что установили его побольше, когда Вы ожидаете большое количество подключений в коротком периоде времени. Некоторые ОС могут иметь максимальное значение этой переменной 128 или 256. Подробности об этой очереди можно посмотреть на man-странице listen(2).

keybuffer

Размер кэш-буфера, для хранения всех недавно использованных ключей. Большой буфер дает самую лучшую эффективность. С переключателем -Sl распределен только один буфер.

max_allowed_packet

Буфер подключений сервера может быть изменен до этого значения, если пользователь дает длинную команду. Начальный буфер = ′net_buffer_length′. На каждое подключение выделяется один буфер.

net_buffer_length

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

max_connections

Максимальное число подключений, которые mysqld может иметь открытыми в одно и то же время.

table_cache

Максимальное число таблиц сохраняемых открытыми на сервере. Таблицы хранятся открытыми, для ускорения запроса к часто используемым таблицам. Однако, каждая открытая таблица требует много памяти.

recordbuffer

Размер кэш-буфера для хранения прочитанных записей. На каждое подключение выделяется один буфер.

sortbuffer

Размер буфера, используемого при сортировке. На каждое подключение выделяется один буфер.

max_sort_length

Максимальное время для сортировки?

 

Полезные замечания

  • Все потоки совместно используют ту же самую основную память.
  • MySQL в настоящее время не использует memmap. Это может изменяться.
  • Вы можете определять размер буфера для ключей при старте mysqld. Буфер ключей будет кэшировать все ключи во всех таблицах В ПОРЯДКЕ ПОСТУПЛЕНИЯ запросов (переменная keybuffer)
  • Каждое подключение использует некоторую часть потока, стек и буфер подключений (переменная net_buffer_length).
  • Каждый запрос, делающий последовательный просмотр записей в таблице, распределяет буфер чтений (переменная recordbuffer).
  • Каждый запрос, выполняющий сортировку, распределяет sortbuffer и один или два временных файла. Максимально необходимое дисковое пространство = (sort_key_length + sizeof(long))*2.
  • Все объединения выполняются за один проход, и результат сохраняется во временной таблице в памяти. Выполнение полного объединения и сортировки на двух больших таблицах может потребовать очень большого объема памяти.
  • Индексные файлы открываются один раз. Файлы данных открываются один раз для каждого параллельного потока. Каждый параллельный поток имеет полную таблицу struct и поле struct плюс память для трех полных строк столбцов. BLOB требует еще 5-8 байт.
  • Если таблица имеет BLOB, буфер будет распределен, чтобы читать данные BLOB. Этот буфер будет расти по мере необходимости, до размеров самого большого BLOB в таблице.
  • Когда таблица используется, она сохраняется в кэше. Этот кэш будет загружен и опорожнен В ПОРЯДКЕ ПОСТУПЛЕНИЯ запросов (FIFO). По умолчанию mysqld будет кэшировать 64 таблицы. Если много потоков обращаются к одной и той же таблице одновременно, будет иметься одна запись на поток. ТО ЕСТЬ, если два потока одновременно обращаются к той же самой таблице, будет две записи в кэше.
  • Команда mysqladmin reload закрывает все таблицы, которые не используются, и отмечает все используемые таблицы, которые будут закрыты, когда работающие потоки завершатся. Это позволяет эффективно использовать память, своевременно ее освобождая.

Если Вы имеете прикладную программу, которая требует большого количества потоков, это является хорошим способом уменьшить значения recordbuffer и sortbuffer примерно до 32K. Вы можете даже уменьшить recordbuffer до 8КБ без особых проблем. Кроме того можно рассматривать уменьшение значения переменной keybuffer до размера в 512КБ. Это сохранит большой объем памяти, и повысит эффективность работы.

Маленькие хитрости по улучшению производительности

После того, как Вы загрузили данные в вашу базу данных, Вы можете выполнить команду ′isamchk -a′ над вашими таблицами. Программа isamchk соберет статистику по вашим таблицам, которую сможет использовать оптимизатор. Вообще, надо выполнить isamchk только однажды на таблице. При этом предполагается, что что данные в таблице во время isamchk выполнены в типичном представлении для вашей таблицы.

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

 

Какая оптимизация выполняется для условия WHERE?

  • Удаление скобок (все ненужные скобки удаляются)
    ((a AND b) AND c OR (((a AND b) AND (c AND d)) -> (a AND b) OR (a AND b AND c AND d)
  • Выполняется свертывание констант
    (a < b AND b=c) AND a=5 -> b > 5 AND b=5
  • Удаление проверки условий в выражении с константами (необходимо из-за свертывания констант).
    (b>=5 AND b=5) OR (b = 6 and 5 = 5) or (B=7 and 5 = 6) -> = B=5 or B=6
  • Если выбор невозможен, возвращаются пустые строки.
  • Поиск всех ключей, которые могут использоваться. Используется тот ключ, который находит меньше записей. Этот ключ используется в следующих выражениях:
    =, >, >= <, <=, BETWEEN и LIKE с префиксом символа ′something%′
  • Удаляются ключи, которые не охватывают все уровни ′AND′ и key_parts для которых не полностью определены требования key_parts.
  key = 1 or A = 10                         -> NULL (Нельзя использовать ключ)
  key = 1 or A = 10 and key=2               -> key = 1 OR key = 2
  key_part_1 = const and key_part_3 = const -> key_part_1 = const
  • Читаются все константы в таблице

Постоянные таблицы:

    1. Таблица всего с одной записью.
    2. Таблица, которая использует только другие константы из таблиц и константы на полном уникальном ключе.
const_table.key = constant

const_table.key_part_1 = const_table2.field and
const_table.key_part_2 = constant
  • Находится лучшая комбинация присоединений для соединения таблиц (увы, методом перебора :-( )
  • Для каждой таблицы используется, если возможно, линейный ключ для чтения записей. Каждый индекс таблицы опрашивается на предмет существования там ключа, который охватывает < 30% записей. Если такой ключ там найдется, то он используется, иначе используется быстрое сканирование таблицы.
  • Перед выводом каждой записи, пропускаются те, которые соответствуют предложению HAVING.

 

Оптимизация памяти, используемой таблицами

Есть несколько вещей, которые Вы можете сделать, чтобы минимизировать количество места, которое используют ваши таблицы. Прежде всего используйте НЕ ПУСТОЙ указатель всякий раз, когда возможно. Это ускорит запросы, и сохранит 1 бит на поле.

Вы можете сохранить много места, используя меньшие целочисленные переменные. Например, MEDIUMINT часто вполне достаточен.

Вообще Вы должны выбрать самый маленький тип данных, в котором Вы будете нуждаться, если есть проблемы с памятью.

Имейте в виду, что поля фиксированной длины в mysql обрабатываются значительно быстрее. Избегая полей переменной длины (VARCHAR, BLOBs), можно повысить эффективность на 10-200%.

Несоответствия типов в INSERT

В настоящее время инструкция INSERT дает ошибку только при вставке пустого указателя (NULL) в не пустой столбец.

При использовании INSERT или команды, которая может воздействовать на много записей, выполняется следующее:

  • Значения преобразуются в правый тип (от integer/real/string до integer/real/string) перед сохранением.
  • Слишком длинные строки усекаются, и увеличивается значение переменной ′warnings′.
  • Если значение ниже минимального значения для столбца, минимальное значение вставляется, и увеличивается значение переменной ′warnings′.
  • Если значение выше максимального значения для столбца, максимальное значение вставляется, и увеличивается значение переменной ′warnings′.
  • При преобразовании строки в целое число, значение усекается при первой не-цифре. Если в строке есть какой-либо символ, не являющийся цифрой, то увеличивается значение переменной ′warnings′.
  • При преобразовании строки в число с плавающей точкой увеличивается значение переменной ′warnings′, если после целого числа есть какие-либо символы, кроме точки.

Во время связи клиента с сервером ′warnings information′ возвращается только при использовании ′ALTER TABLE′ или ′LOAD DATA FROM...′.

О чем говорит номер версии MySQL

Версии MySQL нумеруются по следующей схеме:

111.222.333

111

Если первая цифра изменяется, это означает, что были сделаны серьезные изменения. Они могут включать поддержку новых форматов файлов, новые протоколы, и т.д. Будьте готовы сделать некоторые модификации ваших прикладных программ перед выполнением после обновления. По крайней мере Вам придется выполнить дамп и перезагрузить Ваши таблицы.

222

Значительный новый код/функциональные возможности. Может включать мелочь в поддержке синтаксиса SQL или интерфейса пользователя. Вам не придется делать сильных изменений в Ваших прикладных программах, но тщательно проверьте их перед выполнением.

333

Маленькие безопасные изменения, которые не должны разорвать что-нибудь у сисопа на части. Самая большая проблема здесь - добавление ключевых слов SQL, которые находятся в противоречии с существующими именами таблицы. Если Вы избегаете использовать ключевые слова стандарта SQL-92 для ваших имен таблиц (так вообще-то и надо...), все должно быть ХОРОШО.

Хорошая идея - всегда проверять файл NEWS, когда Вы загружаете новую версию. Это должно дать Вам, представление о том, что именно изменилось, начиная с вашей последней модификации.

Протокол клиент/сервер

На всякий случай приведу подробное описание протокола "клиент-сервер", используемого пакетом MySQL для связи между клиентом и сервером базы данных.

Обозначения

< = клиент
> = сервер
[] 1 байт
[2: ] 2 байта (нижний байт первый)
[3: ] 3 байта (нижний байт первый)
[4: ] 4 байта (нижний байт первый)
[string: ] строка, кончающаяся нулем.
[length: ] длина целого числа. Проверьте Net_store_length()
           для этого! Идея в том, чтобы наиболее часто получать
           данные длиной в 1 байт, но допускать и более длинные
           данные (и NULL).

 

Детальное описание

Каждый передаваемый пакет имеет следующий префикс:

[3: длина пакета] [номер пакета] данные

При приеме пакета добавляется [0] после каждого принятого пакета, чтобы получить простую обработку строк ошибки.

Номера пакетов начинаются с 0 и увеличиваются для каждого посланного/полученного пакета.

Типы пакетов

:connect

> [protocol version] [string: password crypt seed]
< [2: 0] [3: max_allowed_client_packet_length] [string: user name]
[string: scrambled password]

> ok packet

Посмотрите в файле password.c из исходников MySQL какой метод используется для шифрования паролей. Пароль должен быть пустым, если пользователь не имеет никакого пароля.

:ok

[0] [length: affected_rows] [length: unique id]

 

:error

Может приходить в любое время.

> [255] [string: error message]

 

:command

< [command number]

enum enum_server_command{SLEEP,QUIT,INIT_DB,QUERY,FIELD_LIST,
CREATE_DB,DROP_DB,RELOAD,SHUTDOWN,STATISTICS, PROCESS_INFO,CONNECT}

 

:query

< [QUERY command] [string: query string] (The end null is not sent)
> [0] [length: affected rows] [length: insert id] (Insert, delete...)

или:

> [length: column_count] (a query result)
> column field data packets
> row data packets

 

:data

: Данные передаются пока не придет пакет, который состоит только из одиночного символа [254]. Остерегайтесь: могут иметься пакеты, которые начинаются с символа 254! Каждый пакет типа ′data′ имеет поле ′column count′.

Формат каждого поля:

[:length] == NULL_LENGTH -> NULL field

или:

[:length] [length data] (Строка не оканчивается на !)

Пакет данных столбца состоит из 5 столбцов со следующими данными:

[:string table name]
[:string column name]
[:3 create length of column (may be larger in a few cases)]
[:1 type (as of enum_field_types)]
[:1 flag] [:1 decimals] (2 байта!)

При использовании команды list_fields имеется шестой столбец:

[:string default]

Посмотрите в файлах libmysql.c, net.c и password.c более подробную информацию о форматах пакетов.

Подробно о таблицах

Для получения описания таблицы используйте команду (Вы должны перейти в каталог, который содержит таблицу, информацию о которой Вы желаете получить. Вообще это будет $DATADIR/[dbname], где dbname - имя базы данных, которая содержит таблицу.):

prompt> isamchk -d table_name
ISAM file:     table_name
Data records:               215  Deleted blocks:              0
Recordlength:                85
Record format: Packed
table description:
Key Start Len Index   Type
1   37    14  unique  text packed stripped
2   1     30  multip. text packed stripped
3   51    4   multip. long
4   31    2   multip. short
    33    2           short
    35    2           short

Для более подробных сведений о таблице попробуйте: prompt> isamchk -d -v table_name

ISAM file:     Customer
Isam-version:  2
Creation time: 1996-12-17 21:40:04
Data records:                 0  Deleted blocks:              0
Datafile: Parts:              0  Deleted data:                0
Datafilepointer (bytes):      4  Keyfile pointer (bytes):     3
Recordlength:               374
Record format: Packed
table description:
Key Start Len Index   Type                       Root  Blocksize    Rec/key
1   2     2   unique  short                        -1       1024          1
2   4     80  multip. text packed stripped         -1       1024          1
3   2     2   multip. short                        -1       1024          1

Объяснение полученного результата:

ISAM file

Имя ISAM-файла.

Isam-version

Версия ISAM формата. Сейчас всегда 2.

Creation time

Когда файл данных был создан?

Recover time

Когда в последний раз был восстановлен файл индекса/данных?

Data records

Сколько записей/строк.

Deleted blocks

Сколько удаленных блоков все еще занимают место? См. примеры в разделе по isamchk для информации относительно избавления от неиспользуемого места.

Datafile: Parts

Для динамической записи это показывает, сколько блоков данных в ней. Для оптимизированной таблицы без дырок это будет то же, что и Data records.

Deleted data

Сколько всего байт занимают удаленные данные.

Datafilepointer

Сколько байтов занимает указатель файла данных? Это 2, 3 или 4 байта. Большинство таблиц обходится 2 байтами, но это не может управляться из MySQL. Для фиксированных таблиц это адрес записи. Для динамических таблиц это адрес байта.

Keyfile pointer

Сколько байтов занимает указатель файла данных? Это обычно 1, 2 или 3 байта. Большинство таблиц обходится 2 байтами, но это вычисляется mysql автоматически. Это всегда адрес блока.

Max datafile length

Сколько байт может использовать для этой таблицы файл данных (.ISD).

Max keyfile length

Сколько байт может использовать для этой таблицы файл ключей.

Recordlength

Сколько пробела занимает каждая запись/строка?

Record format

Какой формат имеет каждая запись/строка?

table description

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

Краткая информация низкого уровня для каждого ключа:

Key

Номер ключа.

Start

Где в записи/строке начинается индексная часть.

Len

Какой длины индексная часть? Для упакованных чисел это всегда полная длина поля. Для строк она может быть короче полной длины (хотя MySQL все же не поддерживает такой вариант).

Index

unique или multip.

Type

Какой тип данных имеет эта индексная часть? Это - C тип данных (опционально packed или short).

Root

Адрес корня индексного блока.

Blocksize

Размер каждого индексного блока. По умолчанию 1024, но это может быть изменено во время компиляции.

Rec/key

Статистическое значение, используемое оптимизатором. Оно сообщает, сколько записей приходится на этот ключа. Уникальный ключ всегда имеет значение 1. Это может измениться после того, как таблица загружена и стабилизирована, используя isamchk -a . По умолчанию 30.

MySQL FAQ имеет обширную информацию по этой теме.

Ключи и все о них.

Ниже дается некоторая информацию низкого уровня относительно того, как ключи хранятся и используются в MySQL.

Текущий размер блока для B-tree равен 1024 и и всех блоков (за исключением root) - по крайней мере 2/3 от полного. Для типичного идентификатора (id = 4 байта) это означает 1024/(4+4)*2/3=85 ключей в соответствии с записью, и таким образом можно находить позицию реальной записи в 5 позиционированиях.

Если Вы желаете, чтобы ваши индексы B-tree были 100% полными, выполните isamchk с опцией -rq над вашими файлами таблицы.

Только первая часть ключа может быть префиксно сжата. Если два ключа имеют тот же самый префикс, другая часть ключа будет занимать 1 байт. Все строковые части длиннее 4 символов имеют удаленные хвостовые пробелы.

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

Все блоки ключей читаются/пишутся через key_buffer (по умолчанию 1M) так что блок root буферизуется всегда.

Чтение следующего оптимизировано, так что библиотека не должна консультироваться с любым другим блоком при чтении из списка блоков. Это дает очень хорошую эффективность, когда Вы должны читать группу записей с тем же самым ключом.

MySQL: планы на будущее

Ниже приводятся планы по дальнейшему развитию и совершенствованию пакета MySQL и его будущих версиях.

  • В версии 3.21.0 все типы поля будут написаны как классы, и будет сделан новый оптимизатор для WHERE.
  • В версии 3.21.0 будет добавлен метод блокировки таблицы.
  • В версии 3.22.0 будет добавлен простой язык модификаций. Он будет включать поддержку циклов и подпрограмм.
  • Добавление встроенного языка модификаций в 3.22.0 сделает возможным определять свои процедуры для модификации таблиц.
  • Все возможности, требовательные к ресурсам, могут сильно понизить производительность. Поэтому предполагается сделать так, чтобы на этапе компиляции пакета их можно было отключить в случае отсутствия в них необходимости и в целях повышения производительности.

Включение блокировки таблицы и сохраненных процедур должно пройти длинный путь к предоставлению людям функциональных возможностей, в которых они нуждаются без серьезного воздействия на эффективность MySQL.

Такие свойства как views, rollback и triggers будут добавлены на каком-то этапе опционально. Они требуют основательной переработки пакета.

Внутренние и внешние объединения, возможно, будут добавлены в версии 3.21.0

Потоки в Linux

Когда MySQL запущен на Linux системе и использует потоки Linux, Вы будете видеть минимум три процесса. Фактически, это потоки. Будет иметься один поток для Linux Threads manager, один, чтобы обрабатывать подключения и один, чтобы обработать сигналы.

К началу статьи





Добавил: MadvEXДата публикации: 2005-07-08 21:56:02
Рейтинг статьи:3.00 [Голосов 5]Кол-во просмотров: 32075

Комментарии читателей

Всего комментариев: 627

2017-10-16 17:39:15
AndrewLok
ulmuipa

http://www.converseskotilbud.dk/converse-shoes-denmark.html
http://www.zapatillasmodabaratas.es/mizuno-volleyball-tornado-8-721.php
http://www.tv-gratuite.fr/stan-smith-portГ©-517.htm
http://www.alberghifirenzecentro.it/giacca-invernale-abercrombie-130.html
http://www.zapatillasmodabaratas.es/salomon-negras-y-amarillas-833.php

[url=http://www.alpenny.it/new-nike-cortez-big-tooth-143.html]New Nike Cortez Big Tooth[/url]
[url=http://www.zapatillasmodabaratas.es/zapatillas-fila-amazon-198.php]Zapatillas Fila Amazon[/url]
[url=http://www.scarpepumauomo.it/puma-grigie-e-oro-309.php]Puma Grigie E Oro[/url]
[url=http://www.roadcar.co.uk/nike-sneakers-maroon-831.html]Nike Sneakers Maroon[/url]
[url=http://www.zapatillasmizunomujer.es/supra-muska-001-rojas-982.html]Supra Muska 001 Rojas[/url]

2017-10-16 01:45:16
KevinOriff
nekdgzx

http://www.wytchcraft.de/asics-grau-tГјrkis-395.html
http://www.alpenny.it/nike-shox-prezzi-migliori-865.html
http://www.diplo-magazine.co.uk/cheap-adidas-gazelle-trainers-uk-960.php
http://www.immobiliermontenegro.fr/mizuno-wave-inspire-11-test-301.html
http://www.todopabloneruda.com.es/puma-evospeed-multitaco-669.php

[url=http://www.christianlouboutinprezzo.it/871-louboutin-scarpe-trasparenti.htm]Louboutin Scarpe Trasparenti[/url]
[url=http://www.dwaphotography.co.uk/290-nike-free-5.0-green.asp]Nike Free 5.0 Green[/url]
[url=http://www.overdriverockband.co.uk/ray-ban-clubmaster-flash-lenses-434.htm]Ray Ban Clubmaster Flash Lenses[/url]
[url=http://www.nikeairmaxsequent.fr/air-max-90-2016-homme-bleu-227.php]Air Max 90 2016 Homme Bleu[/url]
[url=http://www.150store.it/yeezy-red-535.htm]Yeezy Red[/url]

2017-10-14 06:02:06
Robertkaw
[url=http://www.iranhost24.com/script/til.php?be=76]Cialis Generico En EspaГ±a[/url]
When you have been clinically determined to have obstructive sleep apnea and approved a CPAP, job hard to get inside the habit of utilizing it every time you sleep at night. Although it can be a find it difficult to get used to getting to sleep having a mask on your own deal with, your state of health plus your life depend upon it. Assist your sleeping heart to acquire every little thing altered just right so that you can use CPAP treatment method using a little quantity of pain.
[url=http://www.oranjeverenigingdoornspijk.nl/wp-includes/images/green.php?orderby=11/]Cialis 10 Of 20 Mg[/url]
Exercise on a regular basis, every day, or as you discover a burglary your routine. Exercise may seem like something you need to do in case you are doing work up a perspire, shedding pounds, or overdoing it a bit, but it really can in fact be relaxing to perform straightforward exercises that wide open up your mind as well as your soul.
[url=http://www.bibican.com/fckeditor/editor/config.php?key=109]Vendo Levitra Barcelona[/url]
As was reported at the beginning with this article, it is crucial which every homeowner has insurance with regard to their home. By taking the advice made available to you in the following paragraphs, you might have the reassurance that comes from possessing sufficient protect, and you may even save some money on monthly premiums too.What You Must Understand About Dental care Hygiene
[url=http://www.mallorcaurlaub-exklusiv.de/wp-admin/user/base.php?tee=56]Cialis Generika 5mg[/url]

2017-10-13 00:32:07
Bretttaf
[url=http://www.trustmaster.co.uk/content/client.asp?t=48-Cialis-Discount-Paris-Cialis-France-Cialis-GГ©nГ©rique-Prix/]Cialis Discount Paris[/url]
One crucial whitening teeth suggestion is to make certain that both of you clean and floss your the teeth on a regular basis. This will be significant for your personal total dental health in addition to ensuring you happen to be eliminating something that will mark or discolor your tooth including plaque or espresso.
[url=http://www.riverlakere.com/Library/green.php?g=44/]Kamagra Kopen Apotheek[/url]
Turn your bed room into an get away from coming from all the noise and interruptions of your life. Cancer treatments frequently lead to individuals to have sleep problems, so taking out clocks, tvs and radios from your master bedroom will allow you to relaxation greater. Also try to have the space as darker as is possible to assist in rest.
[url=http://www.glennwilsonconstruction.com/backup/glath/contact.asp?e=47-Cialis-20mg-Australia]Cheap-Cialis-Pills[/url]
Should you be expanding out bangs, purchase some really good high quality headbands and your hair clips. Developing out bangs are often very aggravating along with the procedure may last many months. If you use headbands or tiny clips and also hardwearing . your hair away the face though it develops out, nonetheless, the process will certainly be a lot significantly less bothersome.
[url=http://www.khaihoanglass.com/KhaiHoan/banner.php?ui=Cialis-5-Mg-E-Ipertrofia-Prostatica-Cialis-Prezzo-Online-Generico-Cialis-Tadalafil-26/]Cialis 5 Mg E Ipertrofia Prostatica[/url]

2017-10-12 07:39:01
BrandonTef
[url=http://www.elightingdirect.com/Content/back.php?u=57-Cialis-Lisboa-Generico-Cialis-Portugal-Generico-Cialis-Preço.html]Cialis Lisboa[/url]
Spot orange peels on areas of the epidermis infected with acne breakouts. The ascorbic acid and citric acid in the remove can in fact help recover your pimples. Retain the peel off around the blemish for 25-thirty minutes for the best effects. An alternative choice would be to grind the peel off, combine it with h2o and employ the solution like a face clean.
[url=http://www.cashfornow.ca/img/paybact.php?eer=107-Cialis-Senza-Ricetta-Austria-Cialis-Original-20mg-Cialis-Г–sterreich-Kaufen]Cialis Senza Ricetta Austria[/url]
Should you be uncertain about which major to select, use your first couple of years of college to adopt a wide variety of classes together with your core lessons. You may find yourself interested in stuff you may well usually have never considered. An eclectic duration of review offers you better advice about feasible profession options.
[url=http://www.sepetcioglu.com/images/heaty.php?maid=Viagra-Tilbud-Buy-Viagra-Uk-Viagra-50-Mg-Pfizer-156/]Viagra Tilbud[/url]
Prior to developing a certain social media technique, work out which social media internet site you wish to use. Every single social network website performs in different ways, so it is essential that your method works using the internet site you select. As an illustration, on Fb you may create a survey, in contrast to most web sites.
[url=http://www.industrialresourcescouncil.org/Install/class.php?p=14]Cialis 20mg Online[/url]

2017-10-03 09:11:38
TimothyGap
[url=http://www.amassociatesvadodara.com/images/lis.php?bj=135]Cialis Senza Ricetta Europa[/url]
On-line article marketing positions a lot more challenges than marketing with articles in print or classic media stations. Focus on your article articles and search for approaches to build its weblink equity. This requires persistence and diligence, however, you may ultimately be recognized with a steadily growing online search engine and site significance for your personal content.
[url=http://www.emmtoneel.nl/wp-content/session.php?pl=Kamagra-100mg-Kopen,Kamagra-Gel-100-Mg,Kamagra-Kopen-Waar-12/]Kamagra 100mg Kopen[/url]
Deal with your allergy symptoms should you tend to snore loudly at nighttime. If you are congested or your respiration product is inflammed, you may be more prone to snore loudly when you visit sleep. Work with a decongestant or perhaps antihistamine to treat your allergy symptoms, while keeping your airway obvious at night.
[url=http://www.breisgau-shrimp.de/wp-content/cancle.php?list=29]Levitra Apotheken Umschau[/url]
Intricate carbohydrate food in what you eat will help you to reduce a few of the tense and unfortunate thoughts that you may possibly be encountering. If you take time to eat stuff that are full of intricate carbs, you will naturally be fighting off of these tense sensations that make you uncomfortable and disappointed. Make use of your diet to earn your struggle.
[url=http://www.lrpl.in/images/book.php?p=125.html]Köpa Cialis I Spanien[/url]

2017-09-30 18:38:08
ScottTiste
<a href=http://www.hanzlifts.com/admin/images/logo.php?id=Kamagra-Kaufen-Austria,Kamagra-Apotheke-Erhältlich,Kamagra-Kaufen-Online-46/>Kamagra Kaufen Austria</a>
Whenever you will have a plumbing related dilemma, you do not want to get burned out. This post will give you many ways to learn to handle plumbing related problems. Remember to take your time when repairing nearly anything on your own so that you will not result in any further problems from occurring to your water lines.
<a href=http://www.tispk.com/images/directors.php?page=Cialis-Kaufen-Ohne-Rezept,Cialis-20mg-Kaufen,Cialis-Preise-Generika-64>Cialis Kaufen Ohne Rezept</a>
Investigation some pleasure strategies, including relaxation or deep breathing. For many people, being stressed out could make the ringing in ears more serious, along with the ringing in the ears alone leads to you stress. This positive responses loop could be cracked through the use of relaxation methods, which can help minimize the occurrences of ringing in the ears in your life.
<a href=http://www.condominiodonpaco.com/resources/sock.php?rules=109>Viagra Oslo</a>
If face treatment pimples is an issue, look at slumbering lying on your back during the night. Once you sleep at night on your own abdomen, your skin, neck area, and upper body are consistently re-exposed to the fats and germs rubbed off of through your hair and face, re-clogging your skin pores. Also, make sure to clean your bedding consistently!
<a href=http://www.parshvapolymers.com/themes/green.asp?p=73/>Cialis Ohne Rezept Kaufen Forum</a>

2017-09-21 23:05:15
Jamesgairl
<a href=http://www.mfhs.nu/abercrombie-satД±Еџ-yerleri-577.html>Abercrombie SatД±Еџ Yerleri</a>
Let the sun in. Supplement D can assist relieve some signs of rheumatoid arthritis, and direct sunlight is well known for increasing optimistic feelings and bettering feelings. Opening up your blinds for approximately a quarter-hour each day could be adequate to provide some terrific positive aspects, yet still be from the convenience of your property.

<img>https://www.theunionbar.ca/imagess/the2/16627-air-max-98-supreme-red.jpg</img>

One simple style hint is usually to just be more confident. Regardless how good your garments look, you simply will not truly look stylish if you do not use your clothes with full confidence. You should hold yourself with the maximum self-confidence. This can be one particular way that you could get your fashion to a higher level.

<img>https://www.juliie.se/imagess/jul2/8050-adidas-stan-smith-43.jpg</img>

2017-09-20 20:14:15
Merlinvob
<a href=http://www.barexam101.com/ckeditor/ail.php?y=223>Viagra Rezeptfrei Kaufen Hamburg</a>
It really is finest not to retailer gourmet coffee for too long periods of time. If you have to store caffeine beans for longer than a couple weeks, place the beans within an oxygen-small pot. A zip-leading bag using the oxygen taken out is desired. Store it inside the fridge for about 3 months.
<a href=https://churrasqueirasonline.com.br/fancybox/source/helpers/home.php?ca=185-Viagra-Nebenwirkungen,Lovegra-Kaufen-GГјnstig,Lovegra-Kaufen-Rezeptfrei>Viagra Nebenwirkungen</a>
Research your options. Garden, and organic and natural gardening especially, depends on a lot of specifics which includes crop, climate, climate, earth, and pests. To reach your goals requires plenty of testing. To be as well informed as possible, go through several guides, content, and blog sites on organic garden that you can. These published relating to your condition could be especially helpful.
<a href=http://www.centrodaconstrucaoroloff.com.br/includes/mail.php?num=212>Viagra Rezeptfrei</a>
Do you possess a number of customers about the same apple ipad tablet? You may not would like them to look at your web history. You can eliminate the internet browser historical past easily. Wide open the Adjustments iphone app and tap on Safari. When Safari is available, then touch about the Crystal clear Background button. This may clear the cache and all sorts of cupcakes.
<a href=http://www.stilvoll-rv.de/wp-includes/aid.php?k=45>Kamagra Deutschland Apotheke</a>

2017-09-17 10:31:57
MichaelJurse
ioznvqp

http://www.breisgau-shrimp.de/wp-content/cancle.php?list=7
https://churrasqueirasonline.com.br/fancybox/source/helpers/home.php?ca=37-Lovegra-Online-Apotheke,Viagra-Bestellen,Viagra-Generika-Online-Kaufen
http://www.genouxrapes.com/images/base.php?mn=182
http://www.parkhya.com/images/become.php?em=Generika-Viagra-Test,Viagra-FГјr-Frauen-Tropfen,Viagra-FГјr-Herzkranke-16
http://www.ibrtec.org.br/file.php?p=26

<a href=http://www.hosenrunter.com/wp-content/care.php?p=112>Viagra FГјr Die Frau Rezeptfrei</a>
<a href=http://www.elominas.com.br/sliders/quit.asp?k=99>Kamagra Kaufen Paypal</a>
<a href=http://www.emmaus-hamm.de/images/back.php?p=33>Levitra Bestellen Erfahrungen</a>
<a href=http://www.encontrecontabilidade.com.br/includes/box.asp?id=133-Kamagra-Oral-Jelly-Shop,Kamagra-Gel-Bestellen,Kamagra-Kaufen-Online>Kamagra Oral Jelly Shop</a>
<a href=http://www.civelpinhaopr.com.br/fonts/search.asp?tab=87>Cialis Kaufen 5mg</a>
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Как вы относитесь к AJAX?
Считаю это ЗЛОМ
11% (12)
Бесполезная технология
2% (2)
Мне параллельно
9% (10)
Неплохая технология
20% (23)
Рулез, как я без нее жил!
7% (8)
Я разработчик AJAX-приложений
5% (6)
А что? Хороший футбольный клуб!
12% (14)
Я в танке!!!
34% (38)

Проголосовало: 113
Новая русскоязычная поисковая система "Иван Сусанин"
Рейтинг: 8/10 (4)
Посмотреть все анекдоты