Friday, January 24, 2014

Informix 11.70.xC8

This article is written in English and Portuguese (original version here)
Este artigo está escrito em Inglês e Português (versão original aqui)

English version:
IBM started 2014 with the launch of another Informix fixpack for version 11.70. This time it's 11.70.xC8 and you can check the list of new features here:
As usual I'll not reprint here the full list, but I'll point out some of the features that I thing are more meaningful:

  • Installation
    • Windows
      • Easier installation of 32-bit programs on Windows 64-bit operating systems
        We used to need to add a component (C:\WINDOWS\SYSWOW64) to the PATH environment variable for installing a 32bit product on a 64 bit OS. Now we just have to install it.
  • Administration
    • Error handling
      • New event alarm for network failures
        Already introduced in 12.10, this will alert you if the listeners cannot start. Be very careful if you see this message because it may indicate you're trying to start an already started instance. And because of the way certain operating systems deal with shared memory, it may really happen... and usually leads to corruption.
    • Back up and restore
      • Optimize backups for data de--duplication
        This version can use an environment variable (IFX_BAR_USE_DEDUP) to change the backup image format so that it better fits the storage manager de-duplication process (when this is supported)
      • Enhanced support for IBM Tivoli Storage Manager features
        Allow the communication between the OnBAR process and the storage manager library to use bigger buffers (they default to 64KB which is very small for today's standards). IBM Tivoli Storage Manager and the new Primary Storage Manager (PSM) support this. If you're working with a different storage manager and you need to turn this off set the IFX_BAR_NO_LONG_BUFFERS variable
      • ON-Bar activity log timestamps
        Better information in the OnBAR log if the process is stalled while calling the external XBSA functions.
    • Configuration
      • Compare onconfig files (UNIX, Linux)
        As previously implemented in 12.10
      • Control the duration and frequency of connection attempts
        This allows us to set INFORMIXCONRETRY and INFORMIXCONTIME as parameters in $ONCONFIG. Usually these would have to be set on (every) client environment.
  • Performance
    • Faster operations
      • In-place alter operations on serial data types
        Some SERIAL (SERIAL, SERIAL8 and BIGSERIAL)  type conversions can now be done using the quick "inplace" algorithm for ALTER TABLE that change one to another
    • Dynamic tuning
      • Dynamic private memory caches for CPU virtual processors
        Another autonomic feature. The engine can change the private virtual CPU caches dynamically to adjust to different work patterns. This can however be prevented by defining the (initial) value followed by ",STATIC" for the VP_MEMORY_CACHE_KB parameter
  • Application development
    • New syntax for queries
      • Joins with lateral references
        Better conformance with the ANSI/SQL standard
    • Foreign-key constraints
      • Temporarily prevent constraint validation during creation
      • Faster creation of foreign-key constraints
    • Basic text searching
      • Enhanced basic text searching
        Some performance and functionality enhancements as usual for BTS datablade
    • New default
      • Defining separators for fractional seconds in datetime values
        The "%F" field for GL_DATETIME and DBTIME environment variables and for the format parameter of to_char() and to_date() no longer includes a dot (.) in the format. This effectively changes the behavior of these functions, but the new default makes more sense
  • High availability
    • Connection Manager
      • Improvements to Connection Manager
        The connection manager now supports two new options for SLA definition. ROUNDROBIN and SECAPPLYBACKLOG for respectively send connections across the defined servers in a round-robin fashion and to avoid sending connections to servers that have backlog in a recent interval
    • Monitoring
      • View log-staging information on RS secondary servers
        This information can now be seen by running:
        onstat -g rss verbose
  • Enterprise Replication 
    • Easier setup
      • Simplified schema changes for replicated tables
        Easier to spread the schema changes across the environment by creating a replicateset of tables that need remastering and then running a single command to remaster that replicateset
    • Configuration
      • Control the replication of large objects
        You can force or avoid the replication of large objects
      • Custom checksum function for consistency checking
        Possibility of creating our own checksum validation functions
  • Security
    • Connectivity
      • Transport Layer Security (TLS) versions 1.0, 1.1 and 1.2 enabled by default
        TLS_VERSION is a new parameter to define the TLS version level for securing connections
So, not a lot of new things, but that's something to expect for a mature fixpack level. The new features will be going mainly to version 12.10. Even so I do like some of these a lot:
  • The foreign key features are a major milestone. Not only because they allow us to speed up data movement processes, but because I think it's the first time Informix R&D allows the user to make mistakes. And I'm not joking.... this is a serious matter. These kind of features is usually requested by customers and feared by technical support. Why? Because a user can make a mistake, cause a formal corruption on theiur database and later complain to technical support.
    So why did they do it? Performance naturally and because this was a real request from a real and important customer. The feature will be great if properly used.
  • I also enjoy seeing the INFORMIXCONTIME and INFORMIXCONRETRY as $ONCONFIG options and it facilitates the DBA's work. The defaults are really high...
  • There is also a goodie not shown in the release notes which I'd like to point out. It's APAR IC91678. It's another improvement on a very well known Informix optimizer issue that we can summarize like this: If you have a table with an "incremental" column of type DATE/DATETIME (like a timestamp of an operation) which is indexed, you'll probably face it. When at time T0 you run statistics, there will be no records with this column > T0. But after some time you'll get (many) records after T0 and the distributions don't reflect this. After some time, the optimizer would tend to choose this index over other ones (like client number, user id, phone number etc.). And most of the times this will be a mistake because at T0 + 1 Month for example there will be a lot of records. The latest 11.70 fixpacks and 12.10 will try to compensate for this errors if the condition on these fields look like "column > N" or "column BETWEEN N - Ta AND N + Tb. This compensation is now refined

Versão Portuguesa:
A IBM iniciou 2014 com o lançamento de mais um fixpack da versão 11.70. Refiro-me ao 11.70.xC8 e pode verificar as novas funcionalidades aqui:
Como habitualmente não irei simplesmente copiar as release notes, mas irei salientar alguns pontos que me parecem mais significativos:
  • Instalação
    • Windows
      • Instalação de versões de 32-bits facilitada em ambientes de 64-bits
        Era necessário em versões anteriores adicionar um componente (C:\WINDOWS\SYSWOW64) à variável de ambiente PATH para instalar uma versão de 32-bits num ambiente de 64-bits em Windows. Este requisito foi removido.
  • Administração
    • Gestão de erros
      • Novo evento/alarme para falhas de rede
        Já tinha sido introduzido na versão 12.10, esta funcionalidade que permite alertá-lo se os listeners não conseguirem arrancar. Recomenda-se muito cuidado caso receba esta mensagem, pois pode indicar que está a tentar levantar uma instância que já se encontra a correr E dada a forma como alguns sistemas operativos lidam com os segmentos de memória partilhada, isto pode realmente acontecer.... e normalmente leva a corrupção
    • Cópias de segurança e restauro
      • Otimização de backups para de-duplicação de dados
        Usando uma nova variável de ambiente (IFX_BAR_USE_DEDUP) o formato dos backups seá alterado para melhor se ajustar aos processos de de-duplicação de daods empregues pelo storage manager (se for suportado)
      • Melhor suporte a funcionalidades do IBM Tivoli Storage Manager
        Permite que a comunicação entre o processo OnBAR e a biblioteca do storage manager utilize buffers maiores (por omissão usam 64KB o que é muito pequeno para os standards de hoje em dia). O IBM Tivoli Storage Manager e o novo Primary Storage Manager (PSM) suportam esta funcionalidade. Se trabalhar com outros storage managers pode definir a variável IFX_BAR_NO_LONG_BUFFERS para desativar isto
      • timestamps nos logs de atividade do OnBAR
        Melhor informação nos logs de atividade do OnBAR quando as chamadas XBSA ao storage manager ficam "presas"
    • Configuração
      • Comparação dos ficheiros ONCONFIG (UNIX, Linux)
        Tal como já implementado na versão 12.10
      • Controlo sobre a duração e repetições das tentativas de conexão
        Os valores para as variáveis de ambiente INFORMIXCONRETRY e INFORMIXCONTIME que até aqui tinham de ser definidas do lado do cleinte podem agora ser especificadas no $ONCONFIG como parâmetros
  • Performance
    • Operações mais rápidas
      • Os tpos de dados "SERIAL" (SERIAL, SERIAL8, BIGSERIAL) permitem que os ALTER TABLE entre eles sejam feitos inplace
    • Auto-otimização
      • Caches privadas dos CPUs VPs alteradas dinamicamente
        Mais uma funcionalidade de ajustamento automático. O motor pode mudar as caches privadas dos CPUs VPs para se adaptar a diferentes padrões de utilização. Caso se queira desativar esta funcionalidade deve configurar-se o valor do parâmetro VP_MEMORY_CACHE_KB com o sufixo ",STATIC"
  • Desenvolvimento aplicacional
    • Nova sintaxe SQL
      • JOINs com referências LATERAL
        Melhorada a conformidade com os standards ANSI/SQL
    • Foreign-key constraints
      • Temporariamente previne a validação de constraints
      • Criação mais rápida das constraints
    • Basic text searching
      • Melhorias no databalade BTS
        Algumas melhorias de performance e funcionalidade no BTS datablade
    • Novo default
      • Definição de separadores para frações de segundo em valores datetime
        O campo "%F" para as variáveis de ambiente GL_DATETIME e DBTIME, e para as funções "to_char()" e "to_date()" deixou de assumir/incluir o ponto (.) na formatação. Isto muda efetivamente o comportamento destas funções, mas o novo default faz mais sentido
  • Alta disponibilidade
    • Connection Manager
      • Melhorias no Connection Manager
        O connection manager passa a suportar duas novas opções para a definição dos SLAs: ROUNDROBIN e SECAPPLYBACKLOG respetivamente para enviar conexões para os diversos servidores num formato round-robin e para evitar enviar conexões para servidores que tenham registado um backlog num intervalo de tempo recente
    • Monitorização
      • Ver informação relativa a log staging nos servidores RSS
        Esta informação passa a estar disponível com o comando:
        onstat -g rss verbose
  • Enterprise Replication
    • Configuração mais fácil
      • Simplificação de modificações de schema em tabelas replicadas
        Fica mais fácil espalhar as modificações de schema no ambiente de replicação através da criação de um replicateset das tabelas que necessitam de remastering e depois executar um único comando para fazer o remastering desse replicateset
    • Configuração
      • Controlo sobre a replicação de large objects
        Pode forçar-se a replicação de large objects mesmo quando estes não são modificados na linha de origem
      • Customização de funções de checksum para validação de consistência
        Podemos agora criar as nossas próprias funções (checksum) para uso durante a validação de consistência entre tabelas replicadas em servidores diferentes
  • Segurança
    • Conectividade
      • Um novo parâmetro (TLS_VERSION) permite definir o nível de TLS (Transport Layer Security) para as ligações. As versões 1.0, 1.1 e 1.2 estão habilitadas por defaulti
Portanto, não há muitas novidades, mas isso seria de esperar de um nível de fixpack já bastante maduro. As novas funcionalidades irão aparecendo maioritariamente na versão 12.10. Apesar disso gostaria de salientar algumas que me agradaram mais:
  • As funcionalidades relativas às foreign keys são um marco importante. Não só porque nos permitem acelerar os processos de migração de dados, mas também porque creio que é a primeira vez que o desenvolvimento do Informix permite ao utilizador cometer erros. E não estou a brincar.... é um assunto sério. Este tipo de funcionalidades é habitualmente requisitado pelos clientes e temido pelo suporte técnico. Porquê? Porque um utilizador pode cometer um erro, causando uma corrupção formal na sua base de dados, e mais tarde queixar-se ao suporte técnico. Sendo assim porque o fizeram? Performance obviamente e porque isto foi um pedido explícito de um cliente, devidamente justificado e explicado. A funcionalidade será ótima se bem usada.
  • Também me agrada a possibilidade de ajustar o INFORMIXCONTIME e INFORMIXCONRETRY no $ONCONFIG, visto que facilita a vida do DBA e que os valores assumidos por default são realmente muito altos
  • Existe também um "bónus", não referido nas release notes mas que eu gostaria de salientar: Trata-se do APAR IC91678. É mais uma melhoria num problema bem conhecido do optimizador fo Informix. Podemos explicar o assunto da seguinte forma: Se tivermos uma tabela com uma coluna "incremental" do tipo DATE/DATETIME (como um timestamp de um evento ou actividade), que esteja indexada, corremos o risco de encontrar este problema. Vamos supor que corremos as estatísticas no momento T0, e tipicamente nessa altura não haverá registos com um valor > T0  nessa coluna. Mas após algum tempo, teremos naturalmente um número crescente de registos nessa condição, e as estatísticas não refletem isto. Após algum tempo, o otimizador tenderá a escolher o índice dessa coluna em vez de outros (como por exemplo número de cliente, número de telefone etc.). E na maioria dos casos isso será um erro, pois apesar de as estatísticas não o dizerem, tenderá a haver um grande número de registos nessas condições. Nos últimos fixpacks da 11.70 e 12.10 já existe uma tentativa de compensar isto se a condição sobre esses campos for do tipo "coluna > N" ou "coluna BETWEEN N -Ta AND N + Tb". Essa tentativa foi agora refinada.

1 comment:

Fernando Nunes said...

As reminded by Ben Thomson, to activate the "fix" for the DATETIME index optimizer, a non documented paramater (SQL_DEF_CTRL) bit "0x2" needs to be set... This SQL_DEF_CTRL control would deserve proper documentation...