Notas IBM-AIX
Detecção automática de xlC
está faltando no Autoconf, portando um comando configure
deste tipo é necessário quando estiver compilando o MariaDB (Este exemplo usa o compilador 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
Acima estão as opções usadas para compilar a distribuição MariaDB que pode ser encontrada em http://www-frec.bull.com/.
Se você alterar o -O3
para -O2
na linha de configuração acima, você também deve remover a opção -qstrict
(isto é uma limitação no compilador C da IBM).
Se você estiver usando gcc
ou egcs
para compilar o MySQL, você DEVE usar a opção -fno-exceptions
, já que o manipulador de exceções no gcc
/egcs
não é seguro para threads! (Isto foi testado com egcs
1.1). Existem também alguns problemas conhecidos com o assembler da IBM que pode gerar código errado quando usado com gcc.
Nós recomendamos a seguinte linha do configure
com egcs
e gcc 2.95
no 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
O -Wa,-many
é necessário para o compilador ser bem sucedido. IBM está ciente deste problema mas não está com pressa de corrigí-lo devido ao fato do problema poder ser contornado. Nós não sabemos se o -fno-exceptions
é necessário com gcc 2.9.5
, mas como o MariaDB não utiliza exceções e a opção acima gera código mais rápido, recomendamos que você sempre use esta opção com o egcs/gcc
.
Se você tiver algum problema com código assembler tente alterar o -mcpu=xxx para o seu processador. Normalmente power2, power ou powerpc podem ser usados, de uma maneira alternativa você pode precisar usar 604 ou 604e. Não tenho certeza mas acredito que usar 'power' deve satisfazer a maioria dos casos, mesmo em uma máquina power2.
Se você não sabe qual é o seu processador, utilize o comando 'uname -m', isto irá fornecer a você uma string que parece com '000514676700', com um formato de xxyyyyyymmss onde xx e ss são sempre 0s, yyyyyy é o ID único do sistema e mm é o ID da CPU Planar. Uma tabela destes valores podem ser encontrados em http://publib.boulder.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm. Isto irá lhe fornecer um tipo de máquina e um modelo de máquina que você pode usar para determinar que tipo de cpu você tem.
Se você tiver problemas com sinais (MySQL finaliza sem notificação sob alta carga) você pode ter encontrado um bug de SO com threads e sinais. Neste caso você pode dizer ao MariaDB para não usar sinais configurando-o com:
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
Isto não afeta a performance do MariaDB, mas tem o efeito colateral que você não pode matar clientes que estão dormindo
em uma conexão com mysqladmin kill
ou mysqladmin shutdown
. Neste caso, o cliente morrerá quando ele chegar no próximo comando.
Em algumas versões do AIX, ligando com libbind.a
faz o getservbyname
descarregar core. Isto é erro no AIX e deve ser relatado para a IBM.
Para o AIX 4.2.1 e gcc você tem que fazer as seguintes alterações.
Depois de configurar, edite o config.h
e include/my_config.h
e altere a linha que diz
#define HAVE_SNPRINTF 1
para
#undef HAVE_SNPRINTF
E finalmente, no mysqld.cc
você precisa adicionar um protótipo para initgroups.
#ifdef _AIX41 extern 'C' int initgroups(const char *,int); #endif
Se você precisar se alocar muita memória para o processo mysqld, não é suficiente apenas definir 'ulimit -d unlimited'. Você também deve configurar no mysqld_safe
algo do tipo:
export LDR_CNTRL='MAXDATA=0x80000000'
Você pode encontrar mais sobre o uso de muita memória em: http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm.