поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    2.6.2.7. Сравнительные характеристики 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 также не зависимы от регистра. Единственное ограничение заключается в том, что имена баз данных и таблиц в пределах одного выражения должны задаваться с использованием одинакового регистра символов (see Раздел 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;
      

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

     
    © 1997-2005 PHP Club Team
    Rambler's Top100