Showing posts with label fixpack. Show all posts
Showing posts with label fixpack. Show all posts

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.

Wednesday, August 03, 2016

Informix 12.10.xC7W1

A new PID (Post Interim Drop) for Informix (original version here: http://informix-technology.blogspot.com/2016/08/informix-1210xc7w1.html)


English version
Just a couple of weeks after the regular fixpack 12.10.xC7 IBM launches 12.10.xC7W1. The "W"s are cumulative releases (W2 contains everything W1 contains). They typically come out when there's a strong reason for it, like:

  1. Serious security or functional issue discovered in previous releases and it's yet to early to release the next fixpack
  2. When there are a considerable number of customers asking for specific patches on top of previous fixpack
  3. As part of a more frequent release plan (put the features out as soon as we have them)
 Non-officially, it was suggested this release was triggered by some Cognos (IBM BI software) requests as Informix is the embedded database for it.  But it was also suggested that we could expect more frequent PIDs in the future.

In any case some customers were concerned that a release of a PID so close to the fixpack release date could imply the fixpack (12.10.xC7) had serious issues. That doesn't seem to be the case, and no alert/flash was released.
For the customers that were in the process of planning upgrades to 12.10.xC7 they could consider using 12.10.xC7W1 instead. If you already moved, there seems to be no reason to redo the upgrade process.
12.10.xC7W1 naturally contains some more fixes (that were not ready for 12.10.xC7) and a couple of features that will be made public in 12.10.xC8.


Versão Portuguesa
Apenas um par de semanas depois do fixpack regular 12.10.xC7 a IBM lança a 12.10.xC7W1. Os "W"s são versões cumulativas (W2 contém tudo o que a W1 contém). São lançadas tipicamente quando existe uma razão forte para isso, tais como:
  1. Problemas funcionais ou de segurança fortes descobertos na versão anterior, e quando ainda é muito cedo para lançar o próximo fixpack
  2. Quando há um número considerável de clientes a pedir patches específicos sobre o fixpack anterior
  3. Como veículo de um plano de releases com maior frequência de versões (disponibilizar as funcionalidades assim que as temos)
Não oficialmente foi sugerido que este PID derivou de necessidades do Cognos (software de BI da IBM), visto que o Informix serve de repositório ao Cognos. Mas foi também sugerido que no futuro poderemos ver estes PIDs com mais frequência

Em todo o caso, alguns clientes manifestaram preocupação com a disponibilização de um PID tão em cima da disponibilização de um fixplck regular, pois isso poderia indicar problemas sérios no fixpack 12.10.xC7. Não aparenta ser esse o caso e não foi efetuado nenhum alert/flash relativo ao Informix.

Para clientes que estavam no processo de migração para a 12.10.xC7, poderiam considerar utilizar a 12.10.xC7W1. Se já efetuou o upgrade para a 12.10.xC7 não parece haver motivo imperativo que leve a mudar para a 12.10.xC7. A 12.10.xC7W1 naturalmente contém mais correções (que não estavam prontos na data da 12.10.xC7 e um ar de funcionalidades que será tornada pública quando sair a 12.10.xC8.

Thursday, July 28, 2016

Informix 12.10.xC7

A description of the new features introduced in Informix fixpack 12.10.xC7 (original version here: http://informix-technology.blogspot.com/2016/06/informix-1210xc7.html)


English version
And another fixpack has come out. Informix 12.10.xC7 has been available to customers for around  two weeks. The documentation is available in the Knowledge Center.

The new fixpack will not be known as the greatest ever. The list of features is not long, and more important is highly dedicated to the new features we've been seeing in the latest releases. Things like JSON, Spatial temporal and Timeseries have been the main focus of the enhancements. I'd call this essentially a stability and IoT release. However, not all new features were documented (more on this later). Let's dig into the list:

  • Application development
    • COALESCE function
      This is the only "regular SQL" enhancement. The COALESCE() function accepts an undetermined number of arguments and returns the first non NULL value. It's a sort of glorified NVL(). This is important for compatibility with other vendors, specially considering this would not be possible to implement in a custom function (considering the unknown number and type of the arguments)
  • JSON compatibility
    • Update BSON arrays in an SQL statement
      New MongoDB operators were added to the list of possibilities in the BSON_UPDATE() function: $addToSet, $pop, $pullAll, and $push, plus the array update operator modifiers $each, $position, $slice, and $sort
    • JSON compatibility enhancements
      Several improvements in the JSON handling and MongoDB compatibility:
      • The behavior of the wire listener was changed. Now it send the updates to the database server first. Before the updates were run on the listener
      • We can now use bind variables in SQL statements sent through the wire listener
      • Even if the SQL statements feature is disabled we can activate the execution of procedures and functions. This allows greater control and security without allowing generic SQL execution
      • The transaction command can be used to execute several statements as a single transaction.
      • Compatibility with MongoDB shell version 3.2
      • GridFS functionality (available in the MongoDB drivers) can be used with Informix. This functionality was introduced as a way to sotre files in MongoDB that exceed the 16MB limit of MongoDB objects (note that Informix limit is 2GB).
        This splits the file into smaller chunks and stores the chunks in one collection and the metadata of the file in another collection
      • You can now use the MongoDB aggregation framework pipeline to aggregate time series data or return the time series element in a time range.
    • Load JSON documents with the MQTT protocol
      The MQTT protocol is an ISO lightweight protocol defined to allow sensors and other endpoint devices to send data to repositories or message brokers. Now Informix wire listener can be configured as an MQTT protocol receiver so that data can be sent to the database without further programming
    • Quickly add or remove shard servers with consistent hashing
      A new sharding method, "chash" or consistent hashing allows a member to be added or removed to a sharded object (table or collection) without having to redistribute all the data (only part has to be distributed)
  • Spatiotemporal searching
    • Improved spatiotemporal searching
      There are many improvements in this area. They are very specific and the description requires knowledge of what spatioltemporal data is and how it works. One highlight is the fact that the distance measures now are done in a spherical model and not the old Cartesian one. This was previously done for the spatial datablade and is very important considering the old method would introduce significant errors in the calculations (specially for longer distances and some parts of the globe)
  • Time series
    • Trigger spatiotemporal indexing while loading time series data
      New option allows us to require the indexing of spatiotemporal data when TimeSeries loaded data is written to disk
    • Improved pattern match searching
      TimeSeries pattern matching on BSON documents for numeric data and TimeSeries sub-type
    • Limit future data for rolling window containers
      We can define how many partitions "in the future" can be added. This may avoid that some application or user mistakes delete valid (old) data partitions
    • Enhancements for hertz data
      Removal of some limitations. Hertz (sub-second) data can be inserted after more recent data (out of chronological order), although within a second the order must be respected. And this type of data can now use rolling window containers
    • Longer fragmentation schemes for time series virtual tables
      I have troubles understanding this feature... Apparently the statement for a virtual table creation on top of a timeseries structure could result in an SQL statement that exceeds the maximum size of an SQL statement. So two flags were created to shorten the statement, depending on the scheme used in the base table. What puzzles me is that the SQL statement size was hugely increased in some recent versions
  • Spatial data
    • Convert spatial data to GeoJSON format
      A new function, SE_AsBSON() can be used to convert spatial data into the Geo/JSON format for applications that handle preferably JSON formatted data  
Now... about the non-documented features... Actually this fixpack introduces two important changes that were not (initially at least) documented:
  • The Informix Warehouse Accelerator (the in-memory database add-on that works together with Informix) can now be installed on Linux running on Power8 processors running in Little Endian mode.After several years since it's introduction when we told customers that this component had been designed for Intel processors IBM changes the game. This doesn't mean that what was told to customers was not true... The product really required a special type of instructions called SMD (Single introduction Multiple Data) that were present on Intel processors. Actually these were also present in Power processors, but the programming needed to be adapted to really take advantage of them since the use of these instructions really depends on the data layout in memory. IBM decided to do it now eventually taking advantage that with the Little Endian mode the data layouts will be equal on both platforms. And on the IIUG conference Sandor Szabo made a presentation comparing the product performance in both technologies with a clear advantage for Power. Naturally with anything related to CPUs, we already know it's a leap frog game. Anyway, now customers have a choice for the platform where they'll run the IWA component and this is specially relevant for IBM since it has sold it's x86 line of servers to Lenovo a few years ago.
  • The second feature is "small" but may be very relevant. We introduced the ability to create foreign key constraints with the NOVALIDATE option a few fixpacks ago. Now this was extended to the check constraints. Besides the typical scenario of export/import the other very useful use case for this is when we need to attach a table as a new partition of an existing and already partitioned table. By default Informix will validate that the data in the table validates the expression used for partitioning. This can consume a significant amount of time during the attach, which is clearly undesirable. The workaround was to create a check constraint matching the expression. Informix is smart enough to understand the data is ok, because we have the check constraint. This would consume time, but it could be done prior to the attach during data preparation. Now the constraint can be created with the NOVALIDATE option and that means much faster operations.


Versão Portuguesa
E saiu outro fixpack do Informix, 12.10.xC7. Está disponível para os clientes há cerca de duas semanas. A documentação está acessível no  Knowledge Center.

Este novo fixpack não ficará conhecido como o maior de sempre. A lista de novidades não é longa e mais importante que isso é altamente dedicada às novas áreas que temos visto nas últimas versões. Áreas como JSON, espaço temporal, timeseries têm sido o principal foco das melhorias. Chamar-lhe-ia essencialmente uma versão de estabilidade e dedicada à IoT. Em todo o caso nem todas as novidades foram documentadas (mais sobre isto adiante). Analisemos então a lista:
  • Desenvolvimento de aplicações
    • Função COALESCE
      Esta é a única melhoria do "SQL normal". A função COALESCE() aceita um número indeterminado de argumentos e retorna o primeiro valor não NULO. Como se fosse uma versão glorificada do NVL(). É importante para compatibilidade com outros fornecedores, especialmente porque devido ao número e tipo indeterminado de argumentos, isto não era algo fácil de implementar como uma função desenvolvida pelos utilizadores
  • Compatibilidade JSON
    • Update arrays BSON em instruções SQL
      Novos operadores MongoDB foram adicionados à liste de possibilidades da função BSON_UPDATE(): $addToSet, $pop, $pullAll, e $push, mais os modificadores de operadores  em update array $each, $position, $slice, e $sort
    • Melhorias de compatibilidade JSON
      Várias melhorias na manipulação de JSON e melhor compatibilidade com MongoDB
      • O comportamento do wire listenert foi modificado. Agora envia os updates para a base de dados como primeira opção. Antes os updates eram feitos pelo listener
      • Possibilidade de usar bind variables em instruções SQL enviadas através do wire listener
      • Mesmo que a funcionalidade de envio de SQL esteja desativada é possível ativar a execução de procedimentos e funções. Isto permite maior controlo e segurança por não deixar enviar SQL genérico
      • O comando de transação pode ser usado para executar várias instruções dentro da mesma transação
      • Compatibilidade com a versão 3.2 do MongoDB shell
      • A funcionalidade GridFS (disponível nos drivers MongoDB) pode agora ser usada com Informix. Esta funcionalidade foi introduzida como uma forma de guardar ficheiros no MongoDB que ultrapassassem os 16MB de limite dos objectos em  MongoDB. (note-se que em Informix o limite é de 2GB)
        A funcionalidade parte o ficheiro em pedações mais pequenos e guarda-os numa collection e a metadata sobre os mesmos noutra collection.
      • Possibilidade de utilização da pipeline da framework de agregação do MongoDB para agregar dados TimeSeries ou retornar os elementos TimeSeries num intervalo de tempo
    • Carregar documentos JSON com o protocolo MQTT
      O protocolo MQTT é um protocolo "leve" definido pelo comité ISO para sensores e outros dispositivos terminais, com o objetivo de enviar dados para repositórios de dados ou gestores de mensagens.
      Agora o wire listener do Informix pode ser configurado como um receptor do protocolo MQTT, de forma a que os dados possam ser-lhe enviados sem qualquer programação
    • Adição e remoção rápida de servidores shard com consistent hashing
      Um novo método de sharding, "chash" ou hashing  consistente permite que um membro seja adicionado ou removido a um objeto (tabela ou collection) sem que se tenha de redistribuir todos os dados (apenas uma parte será redistribuída)
  • Pesquisa Spatiotemporal
    • Melhorias na pesquisa spatiotemporal
      Existem muitas novidades nesta área. São muito específicas e a explicação requer um bom entendimento do que são dados spatiotemporal e como funcionam. Um ponto em destaque é o facto de as medidas de distâncias passarem a ser feitas no modelo "esférico" e não no antigo cartesiano. Isto foi introduzido anteriormente no spatial datablade e é muito importante considerando que o método antigo introduzia erros consideráveis nestes cálculos (em particular para distâncias mais longas e certas regiões do globo terrestre)
  • Timeseries
    • Despoletar indexação spatiotemporal durante o carregamento de dados timeseries
      Uma nova opção permite-nos requerer a indexação spatiotemporal enquanto os dados TimeSeries são carregados e escritos em disco
    • Melhoria na pesquisa  pattern match
      TimeSeries "pattern matching" em documentos BSON para dados numéricos e sub-tipo TimeSeries
    • Limite para dados futuros em rolling window containers
      Podemos definir quantas "partições" "no futuro" podem ser adicionadas. Isto pode evitar que alguma aplicação ou utilizador possa, por erro, apagar partições antigas que sejam ainda válidas
    • Melhoria para dados "hertzianos"
      Remoção de algumas limitações. Dados "hertzianos" (sub-segundo) podem ser inseridos após dados mais recentes (fora da ordem cronológica), embora dentro de um mesmo segundo a ordem tenha de ser respeitada. Este tipo de dados pode agora ser também usar rolling window containers
    • Esquemas de fragmentação mais longos para tabelas virtuais sobre timeseries
      Confesso que tenho alguns problemas em entender esta funcionalidade... Aparentemente a instrução para criação de uma tabela virtual sobre uma estrutura timeseries poderia resultar numa instrução que excedesse o limite de tamanho de uma instrução SQL. Para o evitar foram criadas duas flags que permitem encurtar a instrução, dependendo do esquema de fragmentação existente na tabela base. O que me intriga é que o tamanho de uma instrução SQL foi enormemente aumentado em versões recentes, pelo que me parece impensável à partida que pudesse ser atingido
  • Dados Spatial
    • Conversão de dados spatial para formato GeoJSON
      Uma nova função, SE_AsBSON() pode ser usada para converter dados spatial para o formato GeoJSON em aplicações que prefiram lidar com este formato

Agora... sobre as funcionalidades não documentadas.... Na verdade, este fixpack introduz duas mudanças importantes que não foram (inicialmente pelo menos) documentadas:
  • O Informix Warehouse Accelerator (o componente de base de dados em memória que trabalha em conjunto com o Informix) pode agora ser instalado em Linux a correr em processadores Power8 configurados no modo de Little Endian. Após vários anos desde a introdução do produto em que foi dito aos clientes que o mesmo tinha sido desenhado para processadores Intel a IBM decidiu mudar o "jogo". Isto não quer dizer que o que foi dito aos clientes não fosse verdade... O produto realmente necessita um tipo especial de instruções no CPU, chamadas SMD (Single instruction Multiple Data) que existe nos processadores Intel. Mas na verdade os processadores Power também têm o mesmo tipo de instruções, mas a programação tinha de ser alterada / reoptimizada (este tipo de instruções depende da disposição de dados em memória). E a IBM decidiu fazê-lo agora, porventura tirando partido de as diferenças em modo Little Endian serem menores. Na conferência do IIUG o Sandor Szabo efetuou uma apresentação que compreendia uma comparação do produto em ambas as plataformas com vantagem clara para a arquitetura Power. Naturalmente com tudo o que está relacionado com CPUs, todos sabemos que se trata de "saltos de rã", ou seja, uma futura geração de processadores Intel pode reverter estas observações ou minimizar as diferenças.
    De qualquer forma os clientes agora têm duas opções para executar o IWA, sendo isto relevante para a IBM visto que vendeu a sua linha de servidores Intel à Lenovo há uns anos atrás
  • A segunda funcionalidade parece pequena mas é relevante. Introduzimos a possibilidade de criar constraints do tipo chave estrangeira com a opção de NOVALIDATE há uns fixpacks atrás. Agora a opção foi estendida às check constraints. Para além do cenário óbvio de exportação/importação de dados a outra situação em que isto pode ser muito útil é quando queremos adicionar uma tabela como uma nova partição a uma tabela já existente e já particionada. Por omissão o Informix vai validar que os dados existentes na tabela que será o novo fragmento verificam a expressão de particionamento utilizada. Isto pode consumir muito tempo e é feito durante o attach o que é claramente indesejável. A forma de contornar isto seria criar uma check constraint com a mesma condição de particionamento usada na nova partição. O Informix é suficientemente esperto para perceber que se existe uma constraint não tem de voltar a fazer a validação. Ainda assim demorava-se tempo ainda que durante a fase de preparação dos dados. Agora com a possibilidade de criar as check constraints com a cláusula NOVALIDATE poupa-se esse tempo, tornando este tipo de operação muito mais rápido

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, May 26, 2012

Informix 11.70.xC5: It's available / Já está disponível

This article is written in English and Portuguese
Este artigo está disponível em Inglês e  Portguês


English version:
The new fixpack of Informix 11.70 (xC5) is available and the Infocenter documentation was just updated as well as the PDF sets of manuals.
Taken directly from the release notes the new features and functionalities are (comments added after the bullet items):

  • Administration
    • Plan responses to medium-severity and low-severity event alarms
      Mainly a documentation improvement. By describing each possible event ID and the recommended action, IBM is continuing the improvement of the alarm handler allowing the end user to costumize the ALARMPROGRAM scripts
    • IFX_BATCHEDREAD_INDEX environment option
      The batched index read feature can now be controled using SQL through the SET ENVIRONMENT statement
  • Application development
    • Improvement to the keyword analyzer for basic text searching
      An improvement on the way the Basic Text Seach datablade (BTS) handles the keyword analysis to create it's indexes
    • Increased SQL statement length
      It may look a small feature if you never hit the 64KB limit, but it can be a must have if you ever faced that limit. Currently the limit was increased to an absurd 4GB with the exception of the CREATE VIEW which is 2MB
    • Enhanced query performance
      This can be misleading. What it is in fact is that the size of the client/server communication buffer can now be changed to 2GB by using the FET_BUF_SIZE variable. The driver for this was a competitive situation where it was identified that this could be a bottleneck. Note that this can be important for UNLOADs, exports etc.
    • The Change Data Capture API sample program
      Not really a feature. One program that was only found on the docs is now available in $INFORMIXDIR/demo/cdc for convenience
  • Enterprise replication
    • Replication errors on leaf nodes
      Since the leaf nodes in an ER topology can't have much information about errors on other servers, that errors are removed from the syscdrerror tables on leaf nodes
  • Global language support
    • Scan strings with the ifx_gl_complen() functions
      Performance improvement for GLS code
  • Time Series data
    • Count the time-series elements that match expression criteria
      COUNTIF function
    • Remove old time-series data from containers
      Allows the re-use of space after old data removal
    • New operators for aggregating across time-series values
      Improvement to the TSRollup function
  • Data warehousing
    • Refresh data quickly without reloading the whole data mart
      A single partition (fragment) of a fragmented table can be sent to the IWA in-memory database
    • Use high-availability secondary servers to accelerate queries
      HDR, RSS and SDS servers can now be used to create and load datamarts. Previously they could only be used to accelerate queries. This is a big improvement if you want to mix OLTP and BI workloads since you could offload a large part of the BI to the secondary node(s) leaving the primary to the main OLTP work
    • New options added for the use_dwa environment variable
      Several new options for this variable allow you to gain more control about how a session uses the Informix Warehouse Accelerator and to collect more data to understand it's behavior
    • Support for new functions is implemented
      Several new functions are supported in the accelerator, which allows more queries to benefit from it. This time the functions added were: LEN, LENGTH, SUBSTR, SUBSTRING, TODAY, TRIM and YEAR
    • Support for the Solaris Intel x64 operating system added
      This increases the number of platforms where the connection to Informix Warehouse Accelerator is supported. Currently they are: AIX, HP-UX, Solaris Sparc, Solaris Intel and Linux. I'd say the only one missing that matters is Windows!
To be honest, at first glance I didn't find this fixpack had the number of new features that we've become used to in the latest ones. My fellow colleague from tech support immediately found this good (sometimes new features bring new issues and tech support likes "quiet" releases that allow easy rollback to previous versions). But on the other hand if we look into some of these features, we really see that our R&D has been busy. I'm thinking about the Warehouse Accelerator features, the Timeseries and in particular the size of the SQL statements. I believe some people have been struggling with this for many years. And the increase of the maximum client/server communication buffer, can have a dramatic effect on some specific situations. But this is not all. This release has a lot of work that unfortunately is not documented yet. This is divided into two areas:
  1. Performance improvements that can cause issues on some customers or that break undocumented behaviors that applications rely upon. These features have hidden variables that can change the engine behavior if customers hit any issues. Personally I don't like this kind of things, but after seeing some explanations about some of these I tend to understand why this approach was adopted. I have sporadically faced some of these situations over the years and I noticed that one behavior may be desirable in some cases and not in others
  2. New functionality that may be provided to some selected customers or partners while still being developed and improved. This will surely be part of the next major release and the benefit is that they'll be much more stable when they're officially released
So, in short, another fixpack, some significant improvements in Warehouse Accelerator, Timeseries and other very specific points, and a lot of "undercover" work that follows a well established roadmap. Of course I could be accused of "whispering" simply to promote the work of R&D, but if you follow my posts you must agree I don't usually do this. Some stuff that I'm thinking about have recently come up on IIUG mailing list discussion, following up on some other blog's post, so I'm not even the first one to "leak" some of this. Hopefully in the future I'll be able to post something like "do you remember when I whispered about some undercover work? That was this and this and that..." and then you can pick up the "old" 11.70.xC5 fixpack and try a couple of tricks :)

Versão Portuguesa:

O novo fixpack do Informix 11.70 (xC5) está disponível e a documentação no Infocenter e nos PDFs foi actualizada
Tirado diretamente das release notes as novas funcionalidades são (comentários adicionados após cada ponto):

  • Administração
    • Planeamento de respostas para alarmes de baixa e média severidade
      Essencialmente é uma melhoria na documentação. Ao descrever cada possível evento (ID) e as ações recomendadas, a IBM continua a melhorar o gestor de alarmes permitindo ao utilizador final costumizar o seu script para o ALARMPROGRAM
    • Opção de ambiente IFX_BATCHEDREAD_INDEX
      A funcionalidade batched read index pode agora ser controlada por SQL através da instrução SET ENVIRONMENT
  • Desenvolvimento aplicacional
    • Melhoria na análise de palavras chave para a pesquisa básica de texto
      Uma melhoria na forma como o Basic Text Search (BTS) datablade lida com a análise de palavras-chave para criação dos seus índices
    • Aumento do tamanho das instruções SQL
      Pode parecer uma pequena melhoria, se nunca atingiu o limite de 64KB, mas pode ser crítico se alguma vez se deparou com este limite. Desta feita o limite foi aumentado para uns absurdos 4GB, com exceção de um CREATE VIEW que está limitado a 2MB 
    • Performance de queries melhorada
      Esta descrição pode ser enganadora. Não se trata de uma alteração ao optimizador, mas sim da capacidade de aumentar o buffer de comunicação entre o servidor e o cliente para 2GB. Isto pode ser controlado com a variável de ambiente FET_BUF_SIZE que até aqui só podia ir até 32KB. A razão para esta alteração foi uma situação de competição com outra base de dados onde isto foi identificado como um factor limitativo da performance. Note-se que isto pode ser importante para UNLOADs, dbexports etc.
    • Programa de exemplo de Change Data Capture API
      Não é propriamente uma funcionalidade. Um programa que apenas podia ser encontrado no manual pode agora ser mais facilmente utilizado pois existe em $INFORMIXDIR/demo/cdc
  • Enterprise replication
    • Erros de replicação nos leaf node
      Dado que os nós "folha" numa topologia ER não podem ter muita informação sobre erros de outros servidores (acima na cadeia), esses erros foram removidos da syscdrerror nos servidores "folha"
  • Suporte global language
    • Varrer strings com as funções  the ifx_gl_complen()
      Melhoria de performance no código GLS
  • Dados Timeseries
    • Contar os elementos time-series que verificam uma expressão de critério
      Função COUNTIF
    • Remoção de dados antigos de containers de time-series
      Permite a re-utilização de espaço após a eliminação de dados antigos
    • Novos operadores para agregação de valores time-series
      Melhoria na função TSRollup
  • Data warehousing
    • Refrescamento rápido de dados sem re-carregar todo o data mart
      Podemos refrescar apenas uma partição (fragmento) de uma tabela na base de dados in-memory do IWA
    • Utilizar os servidores secundários para acelerar as queries
      Os servidores HDR, RSS e SDS podem ser usados para criar e carregar data marts. Anteriormente apenas podiam ser usados para acelerar queries. Isto é uma grande melhoria se quer misturar utilizações OLTP e BI dado que se pode direcionar toda a carga de BI para os nós secundários, deixando o primário liberto para o trabalho OLTP
    • Novas opções adicionadas à variável use_dwa
      Várias opções foram adicionadas a esta variável para providenciar maior controlo sobre como uma sessão utiliza o Informix Warehouse Accelerator e para recolher mais dados para entender o seu comportamento
    • Suporte para novas funções
      Várias novas funções são suportadas pelo acelerador, o que permitirá que ainda mais queries sejam aceleradas. Desta feita as funções adicionadas foram: LEN, LENGTH, SUBSTR, SUBSTRING, TODAY, TRIM e YEAR
    • Suporte para o sistema operativo Solaris Intel x64
      Aumentou a lista de plataformas que suportam a conexão ao Informix Warehouse Accelerator. Atualmente são: AIX, HP-UX, Solaris Sparc, Solaris Intel e Linux. Diria que a única ausência relevante será o Windows!
Para ser  honesto, à primeira vista, não me pareceu que este fixpack tivesse o mesmo número de funcionalidades a que nos temos habituado nos últimos. O meu colega do suporte técnico considerou imediatamente que isto era positivo (por vezes funcionalidades novas trazem novos problemas e o suporte gosta de versões "calmas", e que permitam regressão com paragem e arranque simples). Mas por outro lado, se olharmos para algumas das novas funcionalidades, verificamos que realmente o desenvolvimento tem estado bastante ocupado.

Estou a pensar em particular nas funcionalidades do Informix Warehouse Accelerator, nas de TimeSeries e muito especificamente no alargamento do limite dos comandos SQL. Sei que alguns clientes têm sofrido com este limite há anos. E o aumento do tamanho máximo do buffer de comunicação pode ter um efeito dramático em situações específicas. Mas isto não é tudo. Esta versão incorpora muito trabalho que infelizmente não está documentado (ainda). Isto divide-se em duas grandes áreas:

  1. Melhorias de performance que podem causar problemas em alguns clientes ou que alteram comportamentos não documentados dos quais algumas aplicações podem depender. Estas funcionalidades tem associadas variáveis não documentadas que podem mudar o comportamento do motor caso os clientes encontrem algum problema. Pessoalmente não gosto deste tipo de configurações, mas após ter visto algumas explicações sobre algumas destas funcionalidades acabo por compreender o porquê de se ter seguido esta abordagem. Já encontrei algumas destas situações esporadicamente e verifiquei que um comportamento pode ser bom para uns casos e mau para outros
  2. Novas funcionalidades que podem ser disponibilizados a clientes e/ou parceiros selecionados enquanto ainda estão a ser desenvolvidas ou melhoradas. Estas serão certamente disponibilizadas numa próxima versão, sendo que o benefício desta abordagem é que quando for feita a introdução formal, estarão muito mais estáveis
Em resumo, mais um fixpack, algumas melhorias significativas no Informix Warehouse Accelerator,  Timeseries e outros pontos muito específicos, e muito trabalho de bastidores que segue um roadmap bem estabelecido. Claro que posso ser acusado de criar "boatos" simplesmente para promover o trabalho do desenvolvimento, mas se segue os meus artigos deverá concordar que tal não é o meu hábito. Algumas das coisas em que estou a pensar quando refiro o trabalho de bastidores foram referidas na lista de email do IIUG recentemente, no seguimento de um artigo de outro blog, portanto nem sequer sou o primeiro  a deixar passar alguma informação mais restrita. Seguramente no futuro ser-me-á possível escrever algo do tipo "lembram-se quando mencionei algum trabalho de bastidores? Referia-me a isto, isto e isto..." e depois poderá pegar na "velha" versão 11.70.xC5 e testar alguns truques :)

Thursday, November 03, 2011

Informix 11.70.xC4 is available / Informix 11.70.xC4 está disponível

This article is written in English and Portuguese
Este artigo está escrito em Inglês e Português

English Version:

IBM has relesed Informix 11.70.xC4 in October 25. The changes in this release, taken directly from the release notes, are (comments added):



  • Administration
    • Enhancements to the OpenAdmin Tool (OAT) for Informix
      OAT now allows the management of database users (for non-OS users) and OAT is now delivered and installable with Client SDK for Windows (32bits), Linux (32 and 64 bits) and MAC OS (64 bits)
    • Enhancements to the Informix Replication Plug-in for OAT
      The ER plugin now follows ER improvements and can handle multibyte locales.
    • Informix Health Advisor Plug-in for OAT
      A totally new plugin that can examine a great number of metrics and configuration details, warning you (email) of anything not within the recommended settings and/or defined thresholds.
      The checks can be scheduled and you can setup several different profiles. Each will run a specific (and configurable) set of metrics.
    • Dynamically change additional configuration parameters
      Several parameters can now be changed with onmode -wm/-wf. Some of them are really important (WSTATS, AUTO_REPREPARE, CKPTINTVL, DIRECTIVES, OPTCOMPIND, SHMADD) and can save you from planned downtime. Others are more or less irrelevant (some of them could be changed by editing the $ONCONFIG file), but it's important that they can be changed through SQL Admin API for client DBA tools
    • Compare date and interval values
      API extensions to compare datetime and interval values.
    • Plan responses to high severity event alarms
      Could not understand what is new. This could be done before by customizing the ALARMPROGRAM script
    • Data sampling for update statistics operations
      A new parameter (USTLOW_SAMPLE) defines if you want to sample the data for the index information gathering or not (indexes with more than 100.000 leaf pages). 11.70.xC3 did this by default. This can also be set at session level. Note that this can have a dramatic impact on the time it takes to regenerate your statistics. The "LOW" will be the slowest for large tables with indexes...
    • SQL administration API command arguments for creating sbspaces
      New options to create smart blob spaces with logging and access time recording in SQL admin API
    • Monitor client program database usage
      The client program's full path name is now available in onstat -g ses.
      Note that although you can use this to monitor and control access, this information is sent by the client side and potentially can be faked (not the average user, but an attacker could do it)
    • Progress of compression operations
      Two new columns in onstat -g dsk show the approximate percentage of the tasks already completed and the estimated time to finish
  • High availability and Enterprise Replication
    • Easier setup of faster consistency checking
      When using ifx_replcheck and an index is created on it, the CRCOLS are not necessary
    • Handle Connection Manager event alarms
      Scripts used for processing connection manager alarms now have access to two variables that identify their name (INFORMIXCMNAME) and unit name (INFORMIXCMCONUNITNAME). This facilitates the script creation
    • Easier startup of Connection Manager
      When the variable CMCONFIG is set and points to the connection manager configuration file, it can be started, stop and restarted without specifying the configuration file. Much like ONCONFIG is used for the engine
    • Prevent failover if the primary server is active
      A new parameter called SDS_LOGCHECK can specify an number of seconds while the SDS secondaries will monitor the logical logs for activity (which would be generated by the primary server). This tries to implement a safety measure to prevent an SDS server to become a primary after a "false" failure of the primary. Note that usually this is prevented by using I/O fencing, but if that is not available this can be another way to make sure you don't end up with two primaries
    • Configure secure connections for replication servers
      A new parameter called S6_USE_REMOTE_SERVER_CFG defines if the file specified by REMOTE_SERVER_CFG will also be used for client connections using the s=6 SQLHOSTS options (for replication). If this parameter is set to 1 the file will be used, otherwise it will default to the old behavior and use $INFORMIXDIR/etc/hosts.equiv
  • Security
    • Global Security Kit (GSKit) support
      A new parameter (GSKIT_VERSION) can be used to specify the Global Security Kit version you intend to use. Informix 11.70.xC4 ships with version 8, but can use version 7
    • Use a file to authenticate server connections in a secured network environment
      Already mentioned above (S6_USE_REMOTE_SERVER_CFG)
  • Time Series data
    • IBM Informix TimeSeries Plug-in for Data Studio
      This new plugin allows the interaction with TimeSeries data from Optim Data Studio and Optim Developer Studio
    • Delete a range of elements and free empty pages from a time series
      Delete improvements in TimeSeries data that should free some pages
    • Aggregate time series data across multiple rows
      Improvement in how we can aggregate TimeSeries data.
Besides bringing some new features, this release also fixes some important bugs that appeared in xC3 around the new automatic read ahead configuration. Apart from this I think it's important to notice the following points:

  • TimeSeries continues to have a great focus on the current enhancements off Informix. This is expectable and desired considering the great news around customer success stories and the recent benchmark.
  • The new OAT health plugin. I didn't have time yet to really explore it, but for sure I would have done a few things differently like re-using the alarmprogram configuration to send alarms. But this is great and being a plugin it can easily be changed if it doesn't fit your needs.
  • The inclusion of OAT inside CSDK is a good step (from my point of view). It makes it easier to get and install. I've installed it very quickly in Windows
  • The new dynamically changeable parameters are a very good step. Of course I would love to be able to change all the parameters without stopping the instance. But we're getting closer. My next favorites would be (and why):
    • LOGBUFF, PHYSBUFF
      After instance healthchecks, may times these should be changed
      I suppose this should not be to hard, since there are a set of each and they're used in a circular fashion. So on change, they could be resized.
      LOGBUFF would probably be harder due to it's role in replication (HDR)
    • TBLSPACE_STATS
      Again, it's a good practice to have this active. But having to stop the instance to fix this is not nice
    • SYSSBSPACENAME, SBSPACENAME
      Sometimes these are not set, but the usage of some new features required them. A restart is not nice...
    • CLEANERS
      Again, many times needed after a configuration check
    • SHMTOTAL
      Many customers don't set it. And sometimes you may need to reduce it or increase it (new OS are able to add/remove memory online). Of course we would not be able to lower it below current usage.
    • DD_*, DS_*, PC_*, PLCY_*, USRC_
      Again, usual candidates to change after a health check. These would be trickier to change, but if we did it for statement cache we should be able to do it for all the other caches. Also a functionality to "flush" these caches or at least remove some entries would be nice.
    • EXT_DIRECTIVES
      Some times customers find out they need it, but it's off by default... Again the restart
    • DBCREATE_PERMISSION
      This is in my view dynamic by nature


Versão Portuguesa:

A IBM lançou o Informix 11.70.xC4 no dia 25 de Outubro. Estas são as mudanças nesta versão (retiradas directamente das release notes (comentários adicionados):



  • Administração
    • Melhorias no OpenAdmin Tool (OAT)
      O OAT permite agora a gestão dos utilizadores de base de dados (para utilizadores não autenticados no sistema operativo) e é agora distribuido com o Client SDK para Windows (32bits), Linux (32 and 64 bits) e MAC OS (64 bits)
    • Melhorias no plugin de replicação do OAT
      O plugin de ER segue as emlhorias do próprio ER e pode lidar com locales multibyte
    • Informix Health Advisor Plug-in para o OAT
      Um plugin totalmente novo que pode examinar um grande número de métricas e detalhes de configuração, avisando (por email) de algo que fuja às recomendações e/ou a parâmetros pré-definidos. Podemos calendarizar verificações periódicas de acordo com vários perfis. Cada perfil irá validar um conjunto de métricas especificas (e configurável)
    • Alteração dinâmica de mais parâmetros
      Vários parâmetros podem agora ser mudados com o onmode -wm/-wf. Alguns são realmente importantes (WSTATS, AUTO_REPREPARE, CKPTINTVL, DIRECTIVES, OPTCOMPIND, SHMADD) e podem evitar paragens planeadas. Outros são relativamente irrelevantes (alguns já podiam ser alterados editando o $ONCONFIG), mas é importante que possam ser alterados através da SQL Admin API, para que possam ser mudados em ferramentas cliente
    • Comparação de datas e intervals
      Extensão da API extensions para comparar valores dos tipos datetime e interval
    • Planear resposta a eventos de alta severidade
      Não consegui perceber o que foi feito de novo. Isto já podia ser feito através da configuração/adaptação do script configurado no parâmetros ALARMPROGRAM
    • Data sampling para operações de UPDATE STATISTICS
      Um novo parâmetro (USTLOW_SAMPLE) define se queremos efectuar sampling na recolha de dados sobre os índices ou não (índices com mais de 100.000 "folhas" - leaf pages). 11.70.xC3 fazía-o por omissão. Isto pode ser activado ao nível da sessão. Note-se que isto pode ter um impacto dramático no tempo que leva a refazer as estatísticas. A opção "LOW" é a mais lenta para tabelas grandes em muitos casos..,
    • Novos argumentos para criar smart blob spaces com a SQL administration API
      As novas opções permitem criar os smart blob spaces com ou sem logging e mantendo ou não o tempo de acesso aos objectos
    • Monitorização do uso das bases de dados por programa cliente
      O nome (caminho) completo do programa cliente está disponível no output do onstat -g ses
      Note-se que apesar de isto poder ser usado para monitorizar ou até condicionar o acesso a uma base de dados, esta informação é enviada pelo cliente e pode potentcialmente ser alterada (não pelo utilizador comum, mas certamente por um atacante)
    • Consulta do progresso das operações de compressão
      Duas novas colunas no output do onstat -g dsk mostras a percentagem aproximada de trabalho já efectuado e o tempo estimado para a sua conclusão
  • Alta disponibilidade e Enterprise Replication
    • Configuração mais fácil de verificação de consistência
      Quando se usa o ifx_replcheck, e se cria um índice por ele, os CRCOLS não são necessários
    • Lidar com alarmística do Connection Manager
      Scripts usados para processar os alarmes do(s) connection managers têm agora acesso a duas variáveis que identificam o seu nome  (INFORMIXCMNAME) e nome de unidade (INFORMIXCMCONUNITNAME). Isto facilita a criação dos scripts
    • Arranque facilitado do Connection Manager
      Quando a variável CMCONFIG está definida e aponta para o ficheiro de configuração do Connection Manager, este pode ser iniciado, parado e re-iniciado sem especificar o ficheiros de configuração. Muito semelhante à utilização da variável ONCONFIG para o motor
    • Prevenção de failover se o servidor primário ainda estiver activo
      Um novo parâmetro, chamado SDS_LOGCHECK pode indicar o número de segundos que os SDS secundários irão monitorizar os logical logs para detectar actividade (que a existir seria gerada pelo primário). Isto tenta implementar uma medida de segurança para prevenir que um servidor SDS se torne primário em caso de falsa falha do primário. Note-se que habitualmente isto é prevenido com recurso ao I/O fencing, mas se essa funcionalidade não estiver disponível, esta pode ser outra forma de evitar ficar com dois servidores primários
    • Configuração de segurança para servidores em replicação
      Um novo parâmetro, S6_USE_REMOTE_SERVER_CFG define se o ficheiro indicado pelo parâmetro REMOTE_SERVER_CFG será também usado para conexões que utilizem a opção s=6 do SQLHOSTS (para replicação). Se o parâmetros estiver a 1 o referido ficheiro será utilizado, caso contrário o comportamento antigo será o escolhido e o ficheiro a usar será $INFORMIXDIR/etc/hosts.equiv
  • Segurança
    • Suporte ao Global Security Kit (GSKit)
      Um novo parâmetros, GSKIT_VERSION, pode ser usado para definir a versão do Global Security Kit que se pretende usar. O Informix 11.70.xC4 incluí a versão 8, mas pode trabalhar com a versão 7
    • Utilizacão de um ficheiro para autenticar conexões de servidores numa rede segura
      Já mencionado atrás (S6_USE_REMOTE_SERVER_CFG)
  • Dados Time Series
    • IBM Informix TimeSeries Plug-in para Data Studio
      Este novo plugin permite interagir com dados TimeSeries a partir do Optim Data Studio e do Optim Developer Studio
    • Apagar um intervalo de elementos e libertar páginas vazias de um time series
      Melhorias nos DELETEs em dados TimeSeries que permitem libertar espaço
    • Agregar dados time series cruzando várias linhas
      Melhorias na forma como podemos agregar informação guardada em TimeSeries
Para além de trazer algumas novas funcionalidades, esta versão também corrige alguns bugs importantes em torno da funcionalidade de read ahead automático introduzido na versão 11.70.xC3. Fora isto, julgo que é importante salientar os seguintes pontos:


  • O TimeSeries continua a receber muito do foco das últimas melhorias no Informix. Isto é expectável e desejável considerando as boas notícias sobre histórias de sucesso e o recente benchmark
  • O novo health plugin do OAT. Não tive muito tempo ainda para o explorar, mas certamente faria algumas coisas de forma diferente, como por exemplo re-utilizar a configuração do ALARMPROGRAM para o envio de alarmes. Mas a criação deste plugin é uma óptima ideia e sendo um plugin pode ser alterado facilmente para se ajustar às nossas necessidades
  • A inclusão do OAT dentro do Client SDK é um bom passo (do meu ponto de vista). Torna ainda mais fácil obter e instalar o OAT. Já o instalei em Windows aproveitando o upgrade de versão que fiz ao Client SDK
  • A possibilidade de mudar dinamicamente mais parâmetros é excelente. Naturalmente que gostaria que todos os parâmetros da instância tivessem esta capacidade. Mas estamos cada vez mais perto. Os meus próximos favoritos seriam (e porquê):
    • LOGBUFF, PHYSBUFF
      Depois de uma análise a uma instância, muitas vezes estes devem ser mudados.
      Imagino que torná-los dinâmicos não fosse muito difícil, pois existem vários buffers que são usados de forma circular. Assim, após um pedido de mudança, quando passa de um para outro podia aproveitar-se para fazer a alteração. O LOGBUFF seria mais difícil pela importância que tem na replicação (HDR)
    • TBLSPACE_STATS
      Também aqui é uma boa práctica ter este parâmetro activo. Mas se for detectado que não está, ter de parar a instância para o mudar não é simpático
    • SYSSBSPACENAME, SBSPACENAME
      Muitas vezes estes não são definidos, mas a decisão de usar novas funcionalidades torna-os necessários. Mais uma vez, obrigar a paragem não é simpático...
    • CLEANERS
      Muitas vezes necessita ser alterado após uma análise à configuração e comportamento da instância
    • SHMTOTAL
      Muitos clientes não o definem. E por vezes podemos ter de reduzir ou aumentar o valor (os novos sistemas operativos já permitem adicionar/remover memória dinamicamente). Naturalmente não seria possível baixar o valor abaixo da quantidade já em uso
    • DD_*, DS_*, PC_*, PLCY_*, USRC_
      Mais candidatos habituais a mudança após uma análise de configuração. Estes seriam possivelmente dos mais complexos de tornar dinâmicos, mas se já se faz para a statement cache deveria ser possível fazer para estes também. Para além disso, uma funcionalidade para limpar uma das caches (ou pelo menos remover alguma entrada) seria útil em determinadas situações
    • EXT_DIRECTIVES
      Alguns clientes descobrem que precisam de o usar, mas está desligado por default. E uma paragem nunca é desejável
    • DBCREATE_PERMISSION
      Este é a meu ver dinâmico por natureza


Thursday, June 30, 2011

11.70.xC3 is available / 11.70.xC3 está disponível

This article is written in English and Portuguese
Este artigo está escrito em Inglês e Português


English version:

My articles backlog keeps increasing, but there are things I can't miss. One of them is the availability of another fixpack of Informix.
The latest one is 11.70.xC3. I spot it on FixCentral a couple of days ago and PDF documentation is already available. InfoCenter is also updated.

As usual there are big news and smaller ones. It really depends on your needs and cares. The follwoing is a straight copy/paste from its release notes:

  • Administration
    • Automatic read-ahead operations
    • Configuring the server response to low memory
    • Reserving memory for critical activities
    • Connection Manager enhancements
    • Enhancements to the OpenAdmin Tool
  • Embeddability
    • Managing message logs in embedded and enterprise environments
  • Developing
    • Built-in SQL compatibility functions for string manipulation and trigonometric support
  • High availability clusters and Enterprise Replication
    • Automatically connecting to a grid
    • Code set conversion for Enterprise Replication
    • Enhancements to the Informix Replication plug-in for OAT
  • Security
    • Non-root installations support shared-memory and stream-pipe connections
    • Retaining numbers for audit log files
    • Restrict operating system properties for mapped users
  • Time Series data
    • Simplified handling of time series data
    • Informix TimeSeries plug-in for OAT
A few remarks:

The possibility of configuring read ahead automatically is great. Let's be honest: How many of us ever really mastered the traditional configuration? Personally I can tell you that a few years ago I tried it in a very controlled environment and I gave up. I could not spot any difference in my tests and over the years I've seen contradictory statements on how it should be setup. So it's a great pleasure to see it can be automatic now.

Server response in a low memory situation is also a great new feature. In cases where I have more than one instance on the same server I insist on setting up SHMTOTAL so that I can isolate any issue caused by excessive memory consumption. This prevents the situation from affecting other instances.
But even so it was usual to see undesirable behaviors on the instance consuming too much memory. And this is easy to understand, because to fix something (rollback, monitor etc.) you still need memory. If you've run out of it, your ability to solve it is constrained.
What IBM did now is give you the ability to reserve some memory, to deal with lack of memory. Seems pretty obvious right? But IBM did more. When you hit the pre-configured thresholds the engine can automatically run some tasks that will allow it to free some memory. So, again, more automation, easier to use in embedded scenarios and more robustness

Connection manager suffered some big changes. Sincerely I need more time to figure them out, but the idea is that a unique connection manager can be used to deal with different needs (high availability, grid, server sets and ER. The configuration file has changed.
As usual, OAT has been changed to accommodate the server side improvements. Several new options are available to deal with log file rotation, low memory conditions setup, lock monitoring (inspired on a plugin initially created by me which is available on the IIUG software repository) and a new plugin to handle TimeSeries.

Several new SQL functions were introduced. This is something that could be solved (most of them could be easily created), but that hurt the new users experience and portability efforts. I would like to see much more in this area...
One interesting new feature is the possibility to configure ER between servers with different codesets. This opens some interesting possibilities for example if you need to convert the codeset of a large database.

Timeseries was also improved, revealing it's one very important aspect of the latests releases.
Finally several security related changes, like improvements for servers in "non-root" installations and for instances configured with mapped users.

I usually concentrate only on the server side improvements, but this time I want to mention a trivial, but long desired change in Client SDK: It now includes dbaccess, the simple but very handy tool. Of course people would like to see a fancy GUI tool on Windows (or even other environments using Java), but that would be much harder, and would certainly increase the footprint.
This is a quick solution for a long lasting problem: the client did not include any query tool. I would vote for the inclusion of other traditional "server side" tools like dbschema and dbload.


Versão Portuguesa

O meu atraso na escrita de artigos continua a aumentar, mas há algumas coisas que não posso deixar passar. Uma delas é a disponibilidade de outro fixpack Informix.
O último é o 11.70.xC3. Encontrei-o há dois dias no site FixCentral e a documentação em PDF já está disponível. O InfoCenter também já está actualizado

Como de costume há grandes novidades e pequenas novidades. Tudo depende das necessidades e preocupações de cada um. O seguinte é a tradução tão fiel quanto possível das novidades especificadas nas notas deste fixpack:

  • Administração
    • Operações automáticas de read-ahead
    • Configuração da reacção do servidor a situações de escassez de memória
    • Reservar memória para actividades criticas
    • Melhorias no Connection Manager
    • Melhorias no OpenAdmin Tool
  • Funcionalidades de inclusão da base de dados em ambientes fechados
    • Gestão de logs de mensagens em ambientes embebidos e empresariais
  • Desenvolvimento
    • Funções SQL de compatibilidade e manipulação de strings e suporte trigonométrico
  • Clusters de alta disponibilidade e Enterprise Replication
    • Conexão automática a uma grid
    • Conversão de mapas de caracteres para Enterprise Replication
    • Melhorias no plugin de replicação Informix para o OAT
  • Segurança
    • Instalações Non-root suportam conexões shared-memory e stream-pipe
    • Retenção de números para os logs de audit
    • Restrição de propriedades de sistema operativo para utilzadores mapeados
  • Dados Time Series
    • Gestão simplificada de dados Time Series
    • Plugin do OAT para Informix TimeSeries


Alguns comentários:

A possibilidade de configurar o read ahead automaticamente parece-me óptima! Sejamos honestos: Quantos de nós conseguiram realmente dominar a configuração tradicional? Pessoalmente posso dizer que há alguns anos atrás tentei num ambiente bastante controlado e desisti. Não consegui identificar diferenças sensíveis nos meus testes, e ao longo dos anos vi indicações contraditórias sobre como isto deveria ser configurado. Por isso é com muita satisfação que vejo que agora pode ser automatizado.

Poder configurar a reacção do servidor em situações de escassez de memória é outra excelente melhoria. Em ambientes onde tenha mais que uma instância por servidor, eu insisto em definir o SHMTOTAL, para que possa isolar qualquer problema causado por excesso de consumo de memória. Isto previne que a situação afecte as outras instâncias (ou no limite a própria máquina). Mas mesmo assim era habitual vermos comportamentos não desejados numa instância que consumisse muita memória. E isto é fácil de entender, porque para corrigir alguma coisa (efectuar um rollback, monitorizar etc.) é necessária memória. Se já a esgotámos, a capacidade de resolver o problema é afectada.
O que a IBM fez agora foi dar-nos a capacidade de reservar alguma memória para lidar com a falta de memória. Parece bastante óbvio, certo? Mas a IBM fez mais. Quando atingimos os limites pré-configurados, o motor pode automaticamente executar algumas tarefas que lhe permitirão libertar memória. Portanto, mais uma vez, mais automatização o que torna mais fácil usar o Informix em ambientes embebidos e aumenta a robustez.

O Connection Manager sofreu grandes alterações. Sinceramente necessito de mais tempo para as analisar, mas a ideia é que um único connection manager pode ser usado para lidar com diferentes necessidades (alta disponibilidade, grid, server sets, e Enterprise Replication). O formato do ficheiro de configuração foi alterado.

Como vem sendo habitual, o Open Admin Tool (OAT) foi alterado para acomodar as melhorias introduzidas no servidor. Novas opções estão disponíveis para lidar com rotação de ficheiros de log, configuração de condições de escassez de memória, monitorização de locks (inspirado num plugin inicialmente criado por mim e disponível no repositório do IIUG) e um novo plugin para lidar com TimeSeries.

Várias novas funções SQL foram introduzidas. Isto é algo que poderia ser resolvido pelo utilizador (a maioria destas podia ser facilmente criada), mas isso dificultava a vida a novos utilizadores e tinha impacto na portabilidade de aplicações. Gostaria de ver muito mais evolução neste aspecto...

Uma funcionalidade interessante é a possibilidade de configurar Enterprise Replication (ER) entre bases de dados que utilizem diferentes mapas de caracteres.
Isto abre possibilidades interessanes se por exemplo necessitar-mos de converter um mapa de caracteres de uma base de dados grande.

O TimeSeries também foi melhorado, revelando que é um dos aspectos mais importantes das últimas versões.
Finalmente, algumas mudanças na área de segurança, como melhorias em servidores instalados como "non-root" e para instâncias configuradas com utilizadores mapeados.

Habitualmente concentro-me apenas nas melhorias do lado do servidor, mas desta vez tenho de mencionar um mudança trivial, mas há muito desejada no Client SDK: Passou a incluir o dbaccess, a ferramenta simples, mas muito útil de interrogação da base de dados. Claro que todos gostaríamos de ver uma ferramenta gráfica nos ambientes Windows (ou mesmo em todos os ambientes, baseado em Java por exemplo), mas a verdade é que isso necessitaria de um esforço muito maior e iria aumentar significativamente a dimensão do cliente.
Isto é uma solução rápida para um problema que existia há muito tempo: o cliente não incluía nenhuma ferramenta de interrogação da base de dados. Eu votaria a favor da inclusão de outras ferramentas "tradicionais" do servidor como o dbschema e dbload.