Sunday, December 06, 2015

Informix 12.10.xC6 is out! / Saíu a versão 12.10.xC6

The xC6 fixpack of version 12.10 is out. Chek out it's features (original version here)

English version
Nearly ten months after the last article... that's probably my worst record. I'm not proud, but as usual there were reasons. Be sure that I haven't left Informix, nor Informix left me... I believe I have some on it in my blood stream. But in fact besides some regular activities on some customers I was tied on some non Informix projects. The fact is, because it just runs and due to it's simplicity, customers don't need too much help. But after some stressing engagements I'm able to breed again, and just in time to pick up with a new Informix release. I always repeat the same idea, which is that for several years we have adopted the "agile" methodology which means we're faster to deliver new features to market. This release is not an exception and as usual I'll post the official list with my unofficial comments:

  • Server changes
    • Support for additional platforms
      Informix is now available on IBM POWER8® for ppc64le with Red Hat Enterprise Linux 7.1, SUSE Linux Enterprise Server 12, and Ubuntu 14.04 LTS;
      These are the "little endian" versions of Linux on Power8 processors which I mentioned in a previous article. Note the "ppc64le" designation
    • Spatial datablase available in new platforms
      IBM Power Series® 64-bit with Red Hat Enterprise Linux ES releases 5.3, 6, and 7, and SUSE SLES 11
      IBM zSeries 64-bit with Red Hat Enterprise Linux ES releases 5.3 and 6, and SUSE SLES 11
  • Administration
    • Multitenancy
      • Limit shared memory and connections for tenant databases
        Two new parameters (TENANT_LIMIT_CONNECTIONS and TENANT_LIMIT_MEMORY) or tenant options allow the definition of memory and number of connections per tenant. When the memory limit is reached the session using more memory will be killed.
      • Restore tenant databases to a point in time
        I can't underline enough how important this feature is. Some custumers have been asking this for years. They usually argued that they should be able to keep their databases in a single (or a set) dbspace, so that they could restore just that dbspace to a point in time (PIT). The problem in allowing that was that Informix had no way to guarantee that the dbspace or set of dbspaces didn't contain objects from another database on the same instance. So doing a PIT could cause inconsistencies on the database and as a general rule we don't allow it. But once tenants were introduced that basic issue was solved, and I was really expecting this to appear in some fixpack.
    • Backup and restore
      • Control restore resources
        A new parameter, BAR_MAX_RESTORE allows us to define the number of parallel processes doing a restore. It acts like BAR_MAX_BACKUP.
  • JSON compatibility
    • Parallel sharded queries
      A sharded query, that is, a query that accesses a sharded table can now run in parallel. The best explanation for this is this really cool video:
    • MongoDB 2.6 and 3.0 compatibility
      Nev features introduced in versions 2.6 and 3.0 of MongoDB are now supported. For a full list please consult the documentation
    • Wire listener enhancements
      Several improvements around security and resource management.
    • Authenticate wire listener connections with Informix
      The mongodb users can have their identity checked by the database server. This means the operations will be done as a specific user and not a generic user defined in the connection URL from the listener to the database. All user activity can be controlled and audited with greater granularity
  • High availability
    • Faster communication between high-availability servers
      A new parameter, SMX_NUMPIPES can be used to define a number of parallel connections for HA servers using the SMX mechanism. This can lead to better performance and less latency in the communications
    • Faster index transfer to secondary servers
      When an index has to be sent to a secondary server using the LOG_INDEX_BUILD option (always for RSS and to HDR when LOG_INDEX_BUILD is set), can use light scans (reads that don't go through the buffer cache) whenever possible
    • Easier cloning of database servers
      A new ifxclone parameter (--createchunkfile) allows the automatically creation of the chunks and mirror chunks on the secondary server.
  • Application development
    • JDBC
      • Reoptimize JDBC queries
        Second best thing in this version. A typical problem with PREPARED statements is that sometimes a query is done with a parameter that makes the "natural" query plan very slow. For example when 50% of a table has many values for a column, but the rest 50% has only one value. Use that column index can be a good thing for the first case and a nasty thing for the second. Many times this is known by the application, and if the query contains those "bad filters" a new argument (withReoptimization) of the IfmxPreparedStatement.executeQuery() method can be used to force the query plan recalculation.
        This is a very typical and common problem which I faced several times. For years we have this functionality in 4GL ( {OPEN|FOREACH} ... WITH REOPTIMIZATION)
      • Keep JDBC socket connections open
        A new JDBC property (IFX_SOC_KEEPALIVE) was introduced to solve a very common issue in application server connections to the database when there's a firewall in the middle. Actually the last article I was writing before my long "winter" was about this issue but I never published it. I started it around February/March this year because I faced it in a Spanish customer. There were other solutions to solve this, but this one is very simple. When we define this new property we're actually asking the operating system to activate a TCP/IP functionality called KEEPALIVE. We can do that with an option in SQLHOSTS (k=1) but usually JDBC connections don't use SQLHOSTS. So that was an issue. Now it's solved. The idea is to prevent the firewall to close the connections due to inactivity
  • SQL
    • Avoid caching SQL statements with unpredictable query plans
      A new optimizer directive (AVOID_STMT_CACHE) can be used to mark an SQL statement as "non cacheable". I'm usually against the use of optimizer directives, but sometimes they're useful...
  • Performance
    • Prioritize databases for automatic update statistics
      A DBA can assign three different levels of priority for a database withing the Automatic Update Statistics system. This can help to make sure more important databases will be worked first, and if the time window for AUS allows, then the other less priority will be run.
  • Security
    • Audit Informix databases with IBM Security Guardium
      In my humble opinion this feature is very badly documented. It gives the idea that now we can use Guardium to audit Informix. In fact Guardium supports Informix for many years (even before IBM acquired Guardium). The new thing here is that we now allow a "communication exit" mechanism to inter operate with Guardium as DB2 has. This allows for some extra Guardium functionality to work with Informix (like the ability to stop/prevent a query from running based on some criteria, redaction, query re-write etc.)
  • Time series data
    • Show time series reference count
      TSInfo() now shows the number of rows in a timeseries table that reference the TS container
    • Default dbspace for time series containers
      If we now specify NULL for the TS containers storage when using the TSCreateContainer() procedure, they will be created in the dbspace where the table is located or in the tentant's catalog dbspace
  • Warehousing
    • Enhanced monitoring of IBM Informix Warehouse Accelerator queries
      A new ondwa option "tasks" will show information about current and queued queries.

Versão Portuguesa
Quase dez meses depois do último artigo... é provavelmente o meu pior record. Não me orgulho, mas como habitualmente houve razões. Tenham a certeza que não deixei o Informix, nem o Informix me deixou... Penso que tenho algum a correr-me no sangue. Mas é um fato que para além de algumas atividades regulares em clientes habituais, estive "preso" em alguns projetos não relacionados com Informix. Na verdade, porque o Informix simplesmente funciona, e devido à sua simplicidade, os clientes não necessitam de muita ajuda.
Mas depois de alguns projetos bastante stressantes, consigo respirar outra vez e mesmo a tempo de pegar numa nova versão do Informix. Eu repito sempre a mesma ideia, que é a de que de hà uns anos a esta parte a IBM ter adotado a metodologia "agile" o que significa que somos mais rápidos a disponibilizar novas funcionalidades ao mercado. Esta versão não é uma exceção e como é habitual vou seguir a lista oficial e adicionar os meus não oficiais comentários:
  • Mudanças no servidor
    • Suporte para plataformas adicionais
      O Informix está agora disponível em IBM POWER8
      ® para ppc64le com Red Hat Enterprise Linux 7.1, SUSE Linux Enterprise Server 12 e Ubuntu 14.04 LTS
      Estes ports são versões "little endian" do Linux para processadores POWER8, que já referi num artigo anterior. Note a designação "ppc64le"
    • O datablade Spatial está disponível em novas plataformas
      IBM Power Series® 64-bit com Red Hat Enterprise Linux ES releases 5.3, 6, e 7, e SUSE SLES 11
      IBM zSeries 64-bit com Red Hat Enterprise Linux ES releases 5.3 e 6, e SUSE SLES 11
  • Administração
    • Multitenancy
      • Limitar a shared memory e o número de conexões am bases de dados tenants
        Dois novos parâmetros (TENANT_LIMIT_CONNECTIONS e TENANT_LIMIT_MEMORY) ou opções dos tenants permitem definir a memória e conexões por tenant. Quando a memória é atingida a sessão com maior utilização de memória é eliminada
      • Restaurar bases de dados tenant para um ponto no tempo
        Não consigo sublinhar devidamente a importância desta funcionalidade. Alguns clientes têm vindo a pedir isto há anos. Normalmente argumentavam que deveriam poder ter uma base de dados num só dbspace (ou num conjunto de dbspaces), e depois deveria ser possível fazer um restore PIT. O problema em permitir isto é que o Informix não tinha forma de garantir que esse(s) dbspace(s) não continha(m) objectos de outras bases de dados da mesma instância e portanto a ação de restore poderia causar inconsistências, e na generalidade não permitimos isso. Mas após a introdução dos tenants esse problema estava resolvido e estava realmente à espera que esta funcionalidade surgisse
    • Backup e restore
      • Controlo sobre os recursos de restauro
        Um novo parâmetro, BAR_MAX_RESTORE permite definir o número de processos em paralelo que trabalham para o restore. Funciona tal como o BAR_MAX_BACKUP.
  • Compatibilidade JSON
    • Queries sharded em paralelo
      Uma sharded query, ou seja uma query que acede a uma sharded table pode agora ser executada em paralelo. A melhor explicação para esta funcionalidade é este interessante vídeo::

    • Compatibilidade MongoDB 2.6 e 3.0
      Novas funcionalidades nas versões 2.6 e 3.0 do MongoDB são agora suportadas. Para uma lista detalhada consulte a documentação
    • Melhorias no Wire listener
      Várias melhorias em termos de segurança e controlo de recursos
    • Autenticação de ligações via wire listener no informix
      Os utilizadores que acedem via a API do MongoDB podem agora ser autenticados no Informix. Isto significa que as operações na base de dados serão efetuadas com o utilizador da aplicação e não com o utilizador definido no URL de conexão ao Informix via wire listener. As ações dos utilizadores podem ser controladas e auditadas com muito maior granularidade
  • Alta disponibilidade
    • Comunicação mais rápida entre servidores configurados em alta disponibilidade
      Um novo parâmetro, SMX_NUMPIPES, pode ser usado para definir o número de canais paralelos de comunicação entre o servidor principal os secundários que usem o mecanismo SMX. Isto pode melhorar a performance e ajudar a baixar a latência
    • Transferências de índices mais rápidas para os servidores secundários
      Quando um índice tem de ser enviado para um servidor secundário utilizando a opção de LOG_INDEX_BUILD (sempre para servidores RSS e para os HDR quando a opções está ativa), o motor tentará usar light scans (leituras que não passam pela buffer cache)
    • Clonagem de servidores facilitada
      Um novo parêmetro (--createchunkfile) do utilitário ifxclone permite a criação automática de chunks e respetivos mirrors no servidor de destino
  • Desenvolvimento aplicacional
    • JDBC
      • Re-otimização de queries JDBC
        A segunda melhor funcionalidade desta versão. Um problema típico de instruções PREPAREd é que por vezes uma query executada com um argumento específico pode transformar um plano de execução correto num que é uma péssima escolha. Tomemos por exemplo um caso em que 50% de uma tabela tem muitos valores para uma coluna, mas que nos restantes 50% tem sempre o mesmo valor. Utilizar um índice nessa coluna pode ser uma boa opção para os valores dispersos, mas será uma má opção se o valor do filtro for o valor que se repete muito. Muitas vezes a aplicação "sabe" quais os valores maus, ou quais as queries em que isto pode acontecer. Para essas situações temos agora um novo argumento (withReoptimization) do métofo IfmxPreparedStatement.executeQuery() que pode forçar nova criação do plano de execução
        Isto é um problema típico e muito frequente que já encontrei diversas vezes. Temos esta funcionalidade no 4GL há anos com o {OPEN|FOREACH} ... WITH REOPTIMIZATION, e agora passa a haver um equivalente para JAVA
      • Manter os sockets de conexões JDBC abertos
        Uma nova propriedade de JDBC (IFX_SOC_KEEPALIVE) foi introduzida para resolver outro problema muito comim nas conexões feitas por servidores aplicacionais quando existe um firewall entre a base de dados e o servidor aplicacional. Curiosamente, o último artigo em que comecei a trabalhar antes do meu longo "inverno" era exatamente sobre este tema.Comecei em Fevereiro ou Março porque me deparei com o problema num cliente em Espanha. Existiam outras soluções para resolver isto, mas esta é muito fácil de implementar. Quando definimos esta propriedade estamos na verdade a pedir ao sistema operativo que active a funcionalidade chamada habitualmente de KEEPALIVE. Podemos fazer isto muito facilmente com uma opção no SQLHOSTS (k=1) mas habitualmente as conexões JDBC não usam o SQLHOSTS. Por isso tornava-se um problema. Agora está resolvido. A ideia é que o firewall não feche as ligações por inatividade
  • SQL
    • Evitar fazer cache de instruções SQL com planos suspeitos
      Uma nova diretiva de optimizador (AVOID_STMT_CACHE) pode ser usada para marcar uma instrução SQL como não "cacheable". Isto evita que a instrução seja candidata a ficar na cache de instruções. Normalmente sou contra o uso de diretivas de optimizador, mas ocasionalmente são úteis e é sempre preferível ter opções.
  • Performance
    • Prioridades nas bases de dados para cálculo automático de estatísticas
      Um DBA pode atribuir diferentes prioridades a uma base de dados na funcionalidade de Automatic Update Statistics. Isto pode ajudar a garantir que as bases de dados mais importantes são trabalhadas primeiro deixando as menos prioritárias para o final da janela de execução definida
  • Segurança
    • Auditar bases de dados Informix com IBM Guardium
      Na minha humilde opinião esta nova funcionalidade está mal descrita. Dá a ideia que agora se pode usar o Guardium para auditar o Informix. Na verdade isso já acontecia há muitos anos (mesmo antes da IBM adquirir o Guardium). A novidade aqui é que agora é permitido uma funcionalidade designada por "communication exit" que permite a inter-ligação com o Guardium, tal como já acontecia com o DB2. Isto permite algumas funcionalidades extra no funcionamento do Guardium com Informix como a possibilidade de parar/impedir uma query baseado num determinado critério, usar data redaction, re-escrever queries etc.
  • Time series
    • Mostrar a contagem de referências em containers
      A função TSInfo() agora mostra o número de linhas numa tabela com timeseries que referencia um TS container
    • DBSpace por omissão para containers timeseriesSe usarmos NULL para o container de TS quando usamos o procedimento TSCreateContainer(), será criado no dbspace onde existe a tabela ou no dbspace onde está o catálogo no caso de ser um tenant
  • Warehousing
    • Melhoria na monitorização de queries do Informix Warehouse Accelerator
      Uma nova opção "tasks" do comando ondwa mostra informação sobre queries actual e em fila

Saturday, February 14, 2015

IIUG Conference 2015 / Conferência IIUG 2015

Have you registered for the IIUG 2015 conference? (original version )

English version
IIUG is organizing its usual annual user conference. This year it will take place in the Mission Valley Marriott in San Diego, between 26-29 April.
As usual the conference is packed with sessions and hands on labs. You can find all the information in the conference website:

IIUG is working hard as usual to provide a great user conference. Meanwhile here's a video teaser to help you decide:

Versão Portuguesa
O IIUG está a organizar a sua conferência anual de utilizadores. Este ano será no hotel Marriott Mission Valley em San Diego entre 26 e 29 de Abril
Como é habitual a conferência está recheada de sessões e laboratórios práticos. Pode encontrar a toda a informação sobre a conferência no seu site:

O IIUG está a trabalhar no duro como habitualmente para promover uma excelente conferência. Entretanto aqui fica um vídeo para abrir o apetite e ajudá-lo a decidir:

Monday, January 26, 2015

Informix on Pi / Informix no Pi

IBM finally released the Pi version (original version here:

English version
A couple of weeks ago IBM discretely let us know that the Informix version for ARM V6 was available for download. It's accessible as a free developer edition on IBM site (Informix downloads) and only the usual site registration is required.
For those of you who may be wondering what is an ARM V6, it may be easier if I say it's the chip included in the well known SoC (System on a Chip) Raspberry Pi small computer.
For clarity I'm including a picture of my own, taken on top of a 20€ bill. The cost rounds 35€ plus some extras. It can be used for very small computer systems, as a controller for all sorts of DIY kits, as a media center solution, and now also as a database server, courtesy of IBM Informix development.

Accordingly to the machine notes it is designed to run on Raspbian (based on debian) which is widely used on the Raspberry Pi. But it may work on others. Raspian is one of the most used OS for Raspberry Pi and it's included in the NOOBS package so it's very easily accessible.

Please not that  ARM V6 is a limited CPU, and the Raspberry Pi itself has (depending on the models) 512MB of RAM. So this will not be your benchmark breaking machine. But if you need to add a database to a small project these specs are more than enough for Informix thanks to it's embedabillity.

The port includes most of the usual Informix functionality, including TimeSeries and the Spatial databalade, the new REST API etc.

Well worth checking!

Versão Portuguesa
Há um par de semanas atrás a IBM deixou saber de forma discreta que a versão para ARM V6 do Informix estava disponível para download. Está acessível como versão de desenvolvimento, de acesso gratuito no site da IBM (Informix downloads) sendo apenas necessário o habitual registo no site.
Para os que estiverem a pensar o que é um ARM V6, talvez seja mais fácil se eu disser que é o processador que vem incluído no bem conhecido SoC (Sistema num Chip) Raspberry Pi, um pequeno computador numa placa.
Para clareza estou a incluir uma imagem de um que possuo, neste caso tirada sobre uma nota de 20€. O seu custo é acima disso (uns 35€ + extras). Pode ser usado em pequenos sistemas computacionais, como controlador em kits "faça você mesmo" ou como media center, e a partir de agora como servidor de base de dados, cortesia do desenvolvimento IBM Informix.
 De acordo com as machine notes, foi desenhado para ser executado em Raspbian (baseado em debian), que é massivamente utilizado no Raspberry Pi. Mas poderá ser executado noutros. O Raspbian é um dos SOs mais usados no Raspberry Pi e vem incluído no pacote NOOBS, o que o torna muito facilmente acessível.

Note que o ARM V6 é um processador bastante limitado, e que o Raspberry Pi tem (dependendo dos modelos) 512MB de RAM. Isto não será portanto uma máquina para esmagar benchmarks. Mas se precisa de adicionar uma base de dados a algum dos seus projectos, estas especificações serão mais que suficientes para o Informix graças às suas conhecidas capacidades de embutimento.

O port incluí a maioria das habituais funcionalidades do Informix, incluindo TimeSeries e o datablade para informação Geo-Espacial, bem como a nova REST API etc.

Vale a pena ver!

Tuesday, January 06, 2015

2015 is here. So what? / 2015 chegou. E então?

Will the world change in 2015? I mean really change? (original version here: )

English version
Again a long interval without posts. I clearly missed my 2014 target, but that's usual. However 2014 ranks as the 3rd year with more articles on the blog. Not bad. I usually start the year as many people with several "new year resolutions" that most of the times I don't accomplish. Maybe that's because I loose focus, or just maybe because I need to re-act to external changes and challenges. Those usually include plans for the blog, but because I'm tired of missing those targets I decided to start working and nothing is better than a subject that relates to 2015.
On December 18, 2014, two distinguish Gartner analysts, Donald Feinberg (@brazingo) and Merv Adrian (@merv) signed an interesting article on Gartner Blog's site entitled "DBMS Legacies are Very Sticky". In that article they "destroy" a "a financial analyst report" that stated that during 2015 the industry would start retiring Sybase and Informix systems. "Destroy" is my own interpretation. Their word to describe it was, and I quote: poppycock. Not being an English native I search Google for the word and the answer was:

noun informal
    "he said I was talking poppycock"
    synonyms:    nonsense, rubbish, garbage, claptrap, balderdash, blather, blether, moonshine

They go on through a very detailed list of arguments relative to Sybase and then the same for Informix. Among this arguments I'd like to highlight the following:

  • "Over a decade later, it remains an integral part of an IBM information management portfolio that includes three primary DBMSs - DB2, IMS and Informix, and newer entrants such as Cloudant. IBM has continued to release new enhanced versions of Informix since the acquisition"
  • "Finally, the number of IBM Informix customers has continued to increase and its user base is very loyal, with one the largest and most active User Groups"
  • And then they position Informix as the IBM choice for:
    • "High-speed processing in verticals like retail (point of sale systems) and manufacturing"
    • "Time-series DBMS – one of its primary features, and a 'timely' one
    • "The Internet of Things, where its high-speed ingest capabilities and small footprint are well-suited"
 What bothers me the most is not that and unknown source (I tried to find out who were the authors of the referenced study without success) makes some false claims. What really bother me is the impact of those claims though the industry. Up to the point that Gartner feels the need to contradict them after being questioned about the conclusions. Are we given these studies the real value they have?
We live in a world full of information, but most of us don't care to consider the value of the information we get, or in other words how valid that is. That's something I'd really like to see changing in 2015...

Versão Portuguesa
De novo um grande intervalo sem artigos. Falhei claramente o objectivo para 2014, mas isso já vem sendo um hábito. No entanto 2014 fica em 3º lugar dos anos com mais artigos no blog. Não é mau. Normalmente começo os anos com várias resoluções de ano novo, que na maioria das vezes não alcanço. Pode ser por falta de foco nos objectivos ou apenas porque tenho de reagir a mudanças e desafios externos. Nessas resoluções incluo habitualmente objectivos para o blog, mas como estou cansado de os falhar decidi meter mãos à obra e nada melhor que começar com algo que se refere a 2015.
Em 18 de Dezembro de 2014, dois distintos analistas da Gartner, Donald Feinberg (@brazingo) e Merv Adrian (@merv) assinaram um artigo interessante no site de blogs da Gartner intitulado "DBMS Legacies are Very Sticky". Nesse artigo, os autores "destroem" um "relatório de analistas financeiros" que afirma que durante 2015 o sector das TI iria começar a reformar sistemas Sybase e Informix. "Destruir" é a minha própria interpretação. A palavra que usaram para descrever o referido estudo foi, e cito: "poppycok". Não sendo um nativo do Inglês procurei no Google o significado da palavra e o resultado foi:

noun informal
    "he said I was talking poppycock"
    synonyms:    nonsense, rubbish, garbage, claptrap, balderdash, blather, blether, moonshine

Se me permitem a tradução, é um substantivo, informal com sinónimos como "sem sentido", "lixo" e outras palavras cuja tradução seria mais vaga, mas penso que já perceberam a ideia.
Eles escrevem de uma forma muito detalhada sobre vários argumentos relativos ao Sybase e depois fazem o mesmo para o Informix. De entre os seus argumentos para o Informix gostaria de destacar os seguintes (traduzido, mas podem consultar a versão original no artigo da Gartner ou na versão Inglesa deste mesmo artigo):
  • "Mais de uma década depois, (o Informix) permanece uma parte integrante do portfolio da área de gestão da informação da IBM que incluí 3 DBMS principais - DB2, IMS e Informix, e novas adições como o Cloudant. A IBM continuou a disponibilizar novas versões melhoradas do Informix desde a aquisição"
  • "Finalmente, O número de clientes IBM Informix tem continuado a aumentar e a sua base de utilizadores é muito leal, com um dos maiores e mais activos grupos de utilizadores"
  • E depois posicionam o Informix como a escolha da IBM para:
    • "Processamento de alta velocidade para mercados verticais como o retalhe (sistemas PoS) e manufactura"
    • "Time-series DBMS – Uma das suas principais características"
    • "A Internet das Coisas, onde a sua capacidade de 'ingestão' a alta velocidade e o pequeno 'foot-print' se adaptam bem"
O que me incomoda mais não é que uma fonte desconhecida (tentei encontrar os autores do estudo, mas sem sucesso) falsa afirmações falsas. O que realmente me incomoda é o impacto dessas afirmações no sector das TI. Chega ao ponto de a própria Gartner sentir a necessidade de contradizer o tal estudo depois de ser questionada sobre as suas conclusões. Estaremos a dar a estes estudos o seu real valor?
Vivemos num mundo cheio de informação, mas a maioria parece não se preocupar em avaliar o valor dessa mesma informação, ou o grau de confiança que nos merece. Isso é algo que gostaria de ver alterado em 2015...