2.6.2.7 Сравнительные характеристики MySQL под Windows и под Unix
2.6.2.7 Сравнительные характеристики MySQL под Windows и под Unix
На настоящий момент версия MySQL под Windows зарекомендовала себя как весьма устойчивая. Возможности этой версии и версии под Unix аналогичны, за исключением следующих моментов:
Windows 95 и потоки
Windows 95 и потоки-
- При создании каждого потока в Windows 95 теряется приблизительно 200 байтов основной памяти. А поскольку каждое соединение с MySQL создает
новый поток, на Windows 95 не следует запускать mysqld на продолжительное время, если ваш сервер обрабатывает много соединений! Другие версии Windows не подвержены этой ошибке. - При создании каждого потока в Windows 95 теряется приблизительно 200 байтов основной памяти. А поскольку каждое соединение с MySQL создает
Параллельное чтение
Параллельное чтение-
- Для обработки смешанных запросов SELECT и INSERT в MySQL используются функции pread() и pwrite(). В настоящее время для эмуляции pread()/pwrite() мы применяем mutex'ы. Однако в наши планы на будущее входит замена интерфейса файлового уровня виртуальным интерфейсом, чтобы иметь возможность использовать интерфейс readfile()/writefile() на NT/2000/XP - с целью ускорения работы. В текущей реализации число одновременно открытых в MySQL файлов не может быть больше 1024; это означает, что вы не сможете создать такое же количество одновременных соединений с MySQL в NT/2000/XP, как в Unix.
Чтение с блокировкой
Чтение с блокировкой-
- В MySQL для каждого соединения используется чтение с блокировкой. Это означает, что:
- Соединение не будет автоматически закрыто по истечении 8 часов, как в случае Unix-версии MySQL.
- В случае ``зависания'' соединения невозможно оборвать его без остановки MySQL.
- mysqladmin kill не работает для ``спящих'' соединений
- mysqladmin shutdown не может отработать до тех пор, пока существуют ``спящие'' соединения.
- В MySQL для каждого соединения используется чтение с блокировкой. Это означает, что:
DROP DATABASE
DROP DATABASE-
- Нельзя удалить базу данных, если она используется каким-либо потоком.
Остановка MySQL из диспетчера задач
Остановка MySQL из диспетчера задач-
- В Windows 95 нельзя остановить MySQL из диспетчера задач или с помощью инструментальной программы shutdown; это можно сделать с помощью mysqladmin shutdown.
Имена, не зависящие от регистра символов
Имена, не зависящие от регистра символов-
- Имена файлов в Windows не зависят от регистра символов, поэтому имена таблиц и баз данных в MySQL под Windows также не зависимы от регистра. Единственное ограничение заключается в том, что имена баз данных и таблиц в пределах одного выражения должны задаваться с использованием одинакового регистра символов (see section 6.1.3 Чувствительность имен к регистру).
Символ каталогов `\'
Символ каталогов `\'-
- Компоненты путей в Windows 95 разделяются символом `\', который также является символом экранирования в MySQL. Если вы используете LOAD DATA INFILE или SELECT ... INTO OUTFILE, символ `\' необходимо вводить дважды:
mysql> LOAD DATA INFILE "C:\\tmp\\skr.txt" INTO TABLE skr; mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;
В качестве альтернативы можно использовать имена файлов Unix-стиля:mysql> LOAD DATA INFILE "C:/tmp/skr.txt" INTO TABLE skr; mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;
- Компоненты путей в Windows 95 разделяются символом `\', который также является символом экранирования в MySQL. Если вы используете LOAD DATA INFILE или SELECT ... INTO OUTFILE, символ `\' необходимо вводить дважды:
Ошибка can't open named pipe (невозможно открыть именованный канал)
Ошибка can't open named pipe (невозможно открыть именованный канал)-
- При использовании MySQL версии 3.22 на NT с самым свежим клиентом mysql можно получить следующее сообщение об ошибке:
error 2017: can't open named pipe to host: . pipe...
Это происходит из-за того, что в данной версии MySQL на NT именованные каналы применяются по умолчанию. Чтобы избежать таких ошибок, следует использовать с новым клиентом MySQL флаг --host=localhost или создать файл флагов `C:\my.cnf', содержащий следующие строки:[client] host = localhost
Начиная с версии 3.23.50 именованные каналы используются только в случае, если mysqld запущен с флагом --enable-named-pipe. - При использовании MySQL версии 3.22 на NT с самым свежим клиентом mysql можно получить следующее сообщение об ошибке:
Ошибка access denied for user (доступ пользователю запрещен)
Ошибка access denied for user (доступ пользователю запрещен)-
- Если вы получили сообщение об ошибке Access denied for user: `some-user@unknown' to database `mysql' при попытке доступа к MySQL-серверу, находящемуся на той же машине, с которой происходит доступ, это значит, что MySQL не может правильно определить адрес вашей машины. Для решения данной проблемы следует создать файл `\windows\hosts', содержащий:
127.0.0.1 localhost
- Если вы получили сообщение об ошибке Access denied for user: `some-user@unknown' to database `mysql' при попытке доступа к MySQL-серверу, находящемуся на той же машине, с которой происходит доступ, это значит, что MySQL не может правильно определить адрес вашей машины. Для решения данной проблемы следует создать файл `\windows\hosts', содержащий:
ALTER TABLE
ALTER TABLE-
- При выполнении оператора ALTER TABLE доступ к таблице для других потоков блокируется. Именно поэтому Windows не может удалить файл, который используется другим потоком (возможно, в будущем мы найдем какой-нибудь способ обойти эту проблему). Выполнение DROP TABLE над таблицей, входящей в состав сводной таблицы MERGE, не будет работать в Windows, так как отображение таблицы, которое выполняет обработчик MERGE, скрыто от верхнего уровня MySQL. Поскольку в Windows нельзя удалять открытые файлы, вначале следует сбросить все MERGE-таблицы (используя FLUSH TABLES) или удалить все MERGE-таблицы перед удалением таблицы. Мы исправим эту ошибку одновременно с введением оператора VIEW. Операторы DATA DIRECTORY и INDEX DIRECTORY в CREATE TABLE в Windows игнорируются, поскольку Windows не поддерживает символические ссылки.
Ниже приведены некоторые открытые вопросы для всех, кто захочет помочь нам в работе над выпусками под Windows:
- Требуется создать однопользовательский сервер `MYSQL.DLL'. Он должен включать все возможности стандартного MySQL-сервера, за исключением потоков. Это заметно упростит использование MySQL в приложениях, которые не нуждаются в настоящем клиент-серверном взаимодействии и в доступе к базе с других машин.
- Нужно было бы добавить в инсталляционный пакет нескольких симпатичных иконок для старта и остановки MySQL.
- При регистрации mysqld в качестве сервиса с флагом --install (на NT) было бы неплохо иметь возможность добавлять флаги по умолчанию к командной строке. Сейчас эта проблема решается путем записи списка параметров в файл `C:\my.cnf'.
- Было бы удобно останавливать mysqld из диспетчера задач. Сейчас для этого нужно применять mysqladmin shutdown.
- Требуется перенести readline в Windows для использования с инструментальной программой, запускаемой из командной строки mysql.
- GUI версия стандартных MySQL-клиентов (mysql, mysqlshow, mysqladmin и mysqldump) будет очень полезна.
- Было бы хорошо, если бы чтение и запись сокетов из `net.c' можно было бы прерывать. Это позволило бы останавливать открытые потоки командой mysqladmin kill в Windows.
- mysqld всегда стартует в местоположении "C", а не в местоположении, установленном по умолчанию. С благодарностью будет принято исправление, позволяющее использование программой mysqld текущего значения местоположения для порядка сортировки.
- Требуется добавить макрос для ускорения безопасного для потоков метода инкремента/декремента, обеспечиваемого Windows.
- Остальные, специфические для Windows вопросы, можно найти в файле README, который находится в поставке MySQL-Windows.