Tuesday, December 06, 2016

Informix 12.10.xC8 is out! / Informix 12.10.xC8 saíu!

What's new in Informix 12.10.xC8 fixpack (original version here: http://informix-technology.blogspot.com/2016/12/informix-1210xc8-is-out-informix.html)

English version
And a new fixpack sees the daylight! This time is version 12.10.xC8. Contrary to the previous one, I think this one brings some exciting news. As usual here's the official list from the documentation but with my own comments:

  • Migration
    • Server changes that affect migration
      A new $ONCONFIG parameter (DISK_ENCRYPTION) was introduced
      A new session environment variable (USE_SHARDING) was introduced
      A new environment variable (IFX_LO_READONLY) was introduced
      This fixpack will force some internal structures migration. In order to go back, reversion (onmode -b) must be used
  • Administration
    • View and rerun DB-Access commands
      DBAccess now has a new option (-history) which can be used in non-menu mode, so that the commands run are labeled with a number, which makes it easier to re-run a previously entered command (run #). A list of commands and their numbers can be retunred by "history"
  • JSON compatibility
    • Consistent sharded insert, update, and delete operations
      When operating with a sharded collection, when we inserted a row that wouldn't belong to the cluster node we were connected to, the record would be moved asynchronously to the correct server. Now we can configure the session so that the servers move the object synchronously (two phase commit) before returning the COMMIT.
    • Complex text search with regular expressions
      We finally introduced the regular expression capabilities in the engine. This is a new auto-register datablade (we used to have a non-official bladelet before). It works in MongoDB API and in normal SQL by introducing a few new functions like regexp_match(), regexp_split etc.
    • JSON compatibility enhancements
      Several improvements in MongoDB API clients:
      • They can use native cursors which makes it perform better on "pagination" queries. Previously the client would need to issue a new query each time
      • The cursors above will have a timeout so that they won't keep opened after the user idles for too long
      • New option to close idle connections on JSON listener
      • A new listener parameter (listener.http.headers.size.maximum) allows controlling the maximum size of incoming HTTP headers
  • Enterprise replication
    • Consistent sharded insert, update, and delete operation
      Same as above but for traditional tables
    • List Enterprise Replication definition commands
      New "cdr list catalog" command will retrieve the CDR commands needed do duplicate current environment (for testing, or move to production)
  • Application development
    • Rename system-generated indexes
      A system generated index is an index automatically created by Informix to support a primary key, unique or foreign key constraint. If we remove the constrain the index is automatically removed. These indexes are distinguished from standard ones because their name starts with a " " (space).
      We now have the chance to rename these indexes which brings two advantages:
      • We may want to standardize the indexes name
      • We may want to remove the constraint but keep the index (which will make it faster if we want to re-implement the constraint)
    • Temporary table space usage
      One of my favorite. Is was nearly impossible to retrieve the session ID associated with temporary objects in the temporary dbspaces (I recently created a script called ixtempuse to overcome this). A new column (SID) was created in sysptnhdr. The column will be populated for temporary objects like hash tables, sort structures, view materialization structures etc. So, from now on it will be trivial to identify the session(s) consuming all of the temporary space
    • Suspend validation of check constraints
      Just like foreign key constraints, the check constraints now accept the "no validate" clause. This is very important in the following scenarios:
      • When importing data, we know it should be ok
      • Informix will verify that the data in the table being attached to a fragmented table (as a new fragment) validates the expression or list/interval that it used for the fragmentation scheme. This can be time consuming during the execution of ALTER FRAGMENT ATTACH as it forces a full scan of the consumed table. A solution for this would be to create a check constraint in the new table before the ATTACH. This would still consume resources and time, but it wouldn't be blocking anything. Now, with the new feature, we can make those check constraints instantaneous and then the engine can use them to skip the full scan!
    • JDBC 4.0 compliance
      We finally improved the Informix native driver compatibility with the JDBC standard. I've been thinking that having "native" and DRDA drivers puts Informix in a tricky situation: On one hand the DRDA drivers are easily updated because they're used by several databases. This makes them a preferable choice. But they don't support all the Informix specific functionality and in order to fix that the DRDA protocol would probably require changes. Being an open standard makes it difficult. It's nice to see investment in the native drivers.
    • Query smart large objects with read-only access
      An application can open smart blobs in read-only mode, which avoids the locking overhead that otherwise would be required
  • Security
    • Encrypt storage spaces
      From this fixpack onward we will be able to use transparent data encryption at the dbspace level. I won't go into high details, but this encryption is totally transparent for the application and database administrators. It intends to protect the database data from system administrators and possible disk copying or theft or privacy issues arising from old disk disposal. The way it works is pretty simple. After configuring a new parameter (DISK_ENCRYPTION) with a name of a keystore, any new dbspace will be encrypted by default. There's an option if you want to create a non encrypted dbspace.
      Encryption of existing dbspaces can be done by backup/restore. Decryption of already encrypted dbspaces can also be done by backup/restore. Each dbspace will use it's own encryption key. Space usage will not increase. Encryption of a table or set of tables can be achieved by moving it to an encrypted dbspace.
  • Time series
    • Advanced analytic for time series data
      New functions to analyze time series data for patterns or abnormalities including quantify similarity, distance, and correlation between two sequences
    • Enhancements to time series functions
      Several improvements on what can be used in expressions for CountIf and Apply functions
  • Embeddability
    • Easier embedded deployment
      ifxdeploy can be used by non-root users and the configuration file is deprecated in favor of command line parameter that were extended.
In global it seems a very promising fixpack (much more interesing than the latest one). Besides all the improvements in the NoSQL areas, it includes a series of important improvements for the common user, like disk encryption, better JDBC compatibility and regular expressions as SQL functions. And naturally it includes bug fixes.

[EDIT 2016-12-13]
Accordingly to an alert from IBM (http://www.ibm.com/support/docview.wss?uid=swg21995897) this fixpack does NOT support rolling upgrades. This isn't a surprise as it changes some internal page structures and by definition no fixpack that does that supports rolling upgrade. But It's better to make it clear

Versão Portuguesa
E um novo fixpack vê a luz do dia! Desta feita é a versão 12.10.xC8. Contrariamente ao anterior penso que este traz novidades muito interessantes. Como habitualmente aqui está a lista oficial mas com os meus comentários:
  • Migração
    • Mudanças no servidor que afetam a migração
      Introdução de um novo parâmetro do $ONCONFIG (DISK_ENCRYPTION)
      Introdução de uma nova variável de sessão (USE_SHARDING)
      Introdução de uma nova variável de ambiente (IFX_LO_READONLY)
      Este fixpack força mudanças na estrutura interna. Para voltar atrás será necessário efetuar uma reversão (onmode -b)
  • Administração
    • Ver e re-executar comandos do DBAccess
      O dbaccess tem agora uma opção (-history) que pode ser usada em modo direto (sem menus). Esta opção faz com que os comandos executados sejam numerados, para mais fácil re-execução de um comando anterior (run #). A lista de comandos já executados e o seu respetivo número pode ser obtida com o comando "history"
  • Compatibilidade JSON
    • Operações (INSERT/UPDATE/DELETE) em shards de forma consistente
      Quando trabalhamos com uma sharded collection, e inserimos uma linha que deverá pertencer a outro nó que não aquele a que estamos ligados, o registo deveria ser movido para o destino de forma assíncrona para o servidor correto. Agora, se assim o desejarmos, podemos pedir que a movimentação seja síncrona (two phase commit) e só então nos seja retornado o COMMIT
    • Pesquisa de texto utilizando expressões regulares
      Finalmente introduzimos as funcionalidades dadas pelas expressões regulares no motor. Trata-se de um novo datablade que se auto-regista quando usamos as suas funções pela primeira vez (já existia um bladelet não oficialmente suportado). Funciona no MongoDB API e em SQL normal, com a introdução de uma série de funções como regexp_match(), regexp_split() etc.
    • Melhorias de compatibilidade JSON
      Várias novidades em clientes MongoDB API:
      • Podem utilizar cursores nativos, o que permite maior eficiência em queries para efetuar paginação. Anteriormente o cliente teria de enviar uma query para cada página
      • Os cursores referidos anteriormente têm um timeout para evitar que fiquem abertos mesmo após longos períodos de inatividade dos clientes
      • Nova opção para fechar conexões inativas no listener de JSON
      • Um novo parâmetro do listener (listener.http.headers.size.maximum) permite controlar o tamanho máximo dos cabeçalhos dos pedidos HTTP recebidos
  • Enterprise replication
    • Operações (INSERT/UPDATE/DELETE) em shards de forma consistente
      Como a nota anterior para sharded collections, mas para tabelas tradicionais
    • Listar comandos de Enterprise Replication
      Novo comando "cdr list catalog" permite obter uma lista de comandos CDR necessária para duplicar o ambiente corrente (para testes ou cópia para produção)
  • Desenvolvimento aplicacional
    • Renomear índices gerados pelo sistema
      Um índice gerado automaticamente pelo sistema é um índice criado pelo Informix para suportar uma constraint como chave primária, chave estrangeira, ou unique constraint.
      Se removermos a constraint o índice é automaticamente eliminado. Estes índices distinguem-se dos normais porque o seu nome começa com um " " (espaço).
      Agora temos a possibilidade de renomear estes índices o que tem duas vantagens:
      • Podemos querer standardizar os nomes dos índices
      • Podemos querer remover a constraint mas manter o índice (o que tornará mais rápida a recriação da constraint se for essa a intenção)
    • Utilização de espaço temporário
      Uma das minhas favoritas! Era quase impossível obter a identificação das sessões que estavam a consumir espaço temporário na instância. Recentemente criei um script chamado ixtempuse para contornar essa dificuldade). Agora foi adicionada uma nova coluna (SID) à view da sysmaster chamada sysptnhdr. A coluna será preenchida para objetos temporários como hash tables, sorts, materialização de views etc. Portanto a partir deste fixpack será trivial obter a informação de que sessão(ões) está a consumir espaço temporário.
    • Suspender a validação de check constraints
      Tals como as chaves estrangeiras, agora as check constraints também aceita a cláusula "no validate". Isto é muito importante nos seguintes cenários:
      • Quando importamos dados e sabemos que os mesmos estão corretos
      • O Informix verifica que os dados de uma tabela que está a ser adicionada como fragmento de uma tabela fragmentada/particionada, validam a expressão de fragmentação em uso.
        Isto pode consumir muito tempo e recursos durante a execução da instrução ALTER FRAGMENT ATTACH, dado que força um full scan na tabela que é consumida. Uma solução para isto era criar uma check constraint na tabela que vamos adicionar que correspondesse à expressão de fragmentação. O otimizador tem inteligência para detetar a relação e evitar a verificação (dado que a constraint já o garante). Isto evita o tempo durante o ATTACH, mas implicava gastar os recursos na validação quando se criava a constraint. Ora agora com o "no validate" podemos criar a constraint instantaneamente, e evitar por completo o desperdício de tempo. Claro que a responsabilidade de garantir que os dados carregados estão corretos fica inteiramente a cargo do utilizador.
    • Conformidade com JDBC 4.0
      Finalmente melhoramos a compatibilidade do driver nativo com o standard JDBC. Eu penso que termos drivers nativos e DRDA coloca o Informix numa situação delicada: Por um lado os drivers DRDA estão mais adequados aos vários standards e são mais frequentemente atualizados pois podem ser usados em várias bases de dados da IBM. Mas por outro lado não suportam algumas funcionalidades específicas do Informix e para corrigir isto o standard DRDA teria de ser modificado. Sendo um standard aberto isto não é fácil. Por isso é muito bom ver investimento feito nos drivers nativos.
    • Acesso a smart large objects em modo de leitura apenas
      Uma aplicação pode optar por abrir smart large objects apenas em modo de leitura o que evita a sobrecarga que a gestão de locks traz.
  • Segurança
    • Encriptação de ficheiros de dados
      A partir deste fixpack poderemos usar encriptação de dados transparente ao nível dos dbspaces. Não irei entrar em detalhes muito técnicos, mas esta encriptação é totalmente transparente para as aplicações e utilizadores da base de dados. Destina-se a proteger os dados de administradores de sistema e possíveis cópias ou roubos de disco ou de problemas de privacidade levantados pela descontinuação de uso de discos antigos.
      A forma como funciona é muito simples. Após configurar um novo parâmetro (DISK_ENCRYPTION) com o nome de uma keystore, qualquer dbspace novo será encriptado. Existe uma opção para os criar sem encriptação.
      A encriptação de dbspaces já existentes pode ser alcançada através de backup/restore. Desencriptação de dbsapces já encriptados pode ser obtido da mesma forma.
      Cada dbspace terá a sua própria chave de encriptação. O espaço ocupado não crescerá por via da encriptação. Encriptação de uma tabela ou conjunto de tabelas específico pode ser conseguido pela movimentação das mesmas para um dbspace encriptado
  • Time series
    • Analítica avançada sobre dados timeseries
      Novas funções para analisar dados timeseries, como pesquisa de padrões ou anormalidades, incluindo quantificação de similaridade, distância e correlação entre duas sequências
    • Melhorias em funções de timeseries
      Várias melhorias no que pode ser usado como expressões para as funções CountIF e Apply
  • Embeddability
    • Distribuição "embebida" mais fácil
      O ifxdeploy pode ser usado como non-root e o seu ficheiro de configuração foi descontinuado em favor de parâmetros na linha de comandos, que foram expandidos
Vendo na globalidade parece-me um fixpack bastante promissor (e bem mais interessante que o último). Para além das melhorias na área do NoSQL, existem várias melhorias importantes para o utilizador comum, como a encriptação de disco, melhor compatibilidade JDBC, verificação de uso de espaço temporário e expressões regulares em funções SQL. E naturalmente uma série de correções de bugs como em qualquer fixpack.

[EDITADO 2016-12-13]
Segundo um alerta da IBM (http://www.ibm.com/support/docview.wss?uid=swg21995897) este fixpack NÃO suporta rolling upgrades. Isto não é uma surpresa pois muda algumas estruturas nas páginas, e por definição nenhum fixpack que o façao suporta rolling upgrade. Mas é melhor deixar isto bem claro.

No comments: