Сравнительные характеристики MySQL под Windows и под Unix


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

  • Windows 95 и потоки

    При создании каждого потока в Windows 95 теряется приблизительно 200 байтов основной памяти. А поскольку каждое соединение с MySQL создает новый поток, на Windows 95 не следует запускать mysqld на продолжительное время, если ваш сервер обрабатывает много соединений! Другие версии Windows не подвержены этой ошибке.

  • Параллельное чтение

    Для обработки смешанных запросов 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 не может отработать до тех пор, пока существуют «спящие» соединения.

    Перечисленные проблемы мы планируем решить, когда наши разработчики под Windows придумают изящный способ их решения.

  • DROP DATABASE

    Нельзя удалить базу данных, если она используется каким-либо потоком.

  • Остановка MySQL из диспетчера задач

    В Windows 95 нельзя остановить MySQL из диспетчера задач или с помощью инструментальной программы shutdown; это можно сделать с помощью mysqladmin shutdown.

  • Имена, не зависящие от регистра символов

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

  • Символ каталогов \

    Компоненты путей в 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;
    

  • Ошибка 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.

  • Ошибка access denied for user (доступ пользователю запрещен)

    Если вы получили сообщение об ошибке Access denied for user: 'some-user@unknown' to database 'mysql' при попытке доступа к MySQL-серверу, находящемуся на той же машине, с которой происходит доступ, это значит, что MySQL не может правильно определить адрес вашей машины. Для решения данной проблемы следует создать файл \windows\hosts, содержащий:

    127.0.0.1 localhost
    

  • 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.

Навигация