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

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


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

    2.6.6.4. Примечания к IBM-AIX

    В Autoconf пропущено автоматическое определение xlC, поэтому при компиляции MySQL следует задавать команду configure наподобие следующей (в этом примере используется компилятор IBM):

    export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 "
    export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192"
    export CFLAGS="-I /usr/local/include"
    export LDFLAGS="-L /usr/local/lib"
    export CPPFLAGS=$CFLAGS
    export CXXFLAGS=$CFLAGS
    ./configure --prefix=/usr/local \
    		--localstatedir=/var/mysql \
    		--sysconfdir=/etc/mysql \
    		--sbindir='/usr/local/bin' \
    		--libexecdir='/usr/local/bin' \
    		--enable-thread-safe-client \
    		--enable-large-files
    

    Здесь указаны опции, используемые для компиляции дистрибутива MySQL, который находится по адресу https://www-frec.bull.com/.

    Если в приведенных выше строках конфигурации вы изменяете -O3 на -O2, следует также удалить опцию -qstrict (это ограничение компилятора IBM C).

    При использовании gcc или egcs для компиляции MySQL следует применять флаг -fno-exceptions, потому что обработчик исключительных ситуаций в gcc/egcs не безопасен в реализации потоков! (Это проверено на egcs 1.1.) Существуют также некоторые известные проблемы с ассемблером IBM, которые могут привести к генерации неудачного кода при использовании его с gcc.

    Для использования egcs или gcc 2.95 на AIX мы рекомендуем следующую строку конфигурирования:

    CC="gcc -pipe -mcpu=power -Wa,-many" \
    CXX="gcc -pipe -mcpu=power -Wa,-many" \
    CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \
    ./configure --prefix=/usr/local/mysql --with-low-memory
    

    Для того чтобы компиляция была успешной, здесь необходимо указывать ключи -Wa,-many. В IBM известно о существовании данной проблемы, но ее специалисты не торопятся исправлять ошибку, поскольку существует способ обхода. Нам неизвестно, необходимо ли использование -fno-exceptions с gcc 2.95, но поскольку в MySQL нет обработчика исключительных ситуаций, а эта опция способствует созданию более быстрого кода, мы рекомендуем всегда использовать ее с egcs/gcc.

    В случае возникновения проблем в программах на ассемблере необходимо привести -mcpu=xxx в соответствие со своим процессором. Обычно достаточно использовать power2, power или powerpc, но, возможно, необходимо будет указать 604 или 604e. Хотя это и не приветствуется, но использование "power" будет безопасным почти всегда, даже на power2-машинах.

    Если вы не знаете, какой у вас процессор, следует запустить uname -m. Данная команда возвращает строку наподобие "000514676700", формат которой xxyyyyyymmss, где xx и ss всегда 0, yyyyyy - уникальный идентификатор системы и mm - идентификатор процессора Planar. Карта этих значений находится по адресу https://publib.boulder.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm.

    В соответствии с данной картой можно узнать тип и модель машины, а уже по ним -определить тип процессора.

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

    shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \
           CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti \
           -DDONT_USE_THR_ALARM" \
           ./configure --prefix=/usr/local/mysql --with-debug --with-low-memory
    

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

    На некоторых версиях AIX линкование с libbind.a приводит к тому, что getservbyname вызывает аварийную остановку программы с сохранением образа памяти на диск (core dump). Это ошибка AIX и о ней следует сообщить в IBM.

    Для AIX 4.2.1 и gcc необходимо сделать следующие изменения:

    После конфигурации следует отредактировать файлы config.h и include/my_config.h, а также изменить строку, содержащую

    #define HAVE_SNPRINTF 1
    

    на

    #undef HAVE_SNPRINTF
    

    И напоследок необходимо в файле mysqld.cc добавить прототип функции initgoups.

    #ifdef _AIX41
    extern "C" int initgroups(const char *,int);
    #endif
    

    Если вам нужно выделить много памяти процессу mysqld, недостаточно указать ulimit -d unlimited. Вам также потребуется в mysqld_safe установить что-то вроде:

    export LDR_CNTRL='MAXDATA=0x80000000'
    

    Больше информации об использовании большого количества памяти - здесь: https://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm.

     
    © 1997-2005 PHP Club Team
    Rambler's Top100