Showing posts with label tenant. Show all posts
Showing posts with label tenant. Show all posts

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

Friday, July 11, 2014

Version 12.10.xC4 is out! / Saíu a versão 12.10.xC4

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


English version

I'm lagging behind on my objective of a post per week, but as usual... work... But I couldn't let this opportunity pass by. The latest Informix fixpack is out, and the online documentation was updated and the new PDFs are also available. Everything at once as it should be. Apparently this is becoming an habit, and although this would be expected, it didn't always happen, so I must say I'm happy it's happening now.
I'll repeat myself, but being true, I don't see why I shouldn't say it again: Once more we have a fixpack full of features. I honestly think the majority of our customers don't realize the changes the product have been going through... By changes I mean new features, as the "old" ones are still around. But on every fixpack it seems the possible usages and potential users are getting larger and larger. IBM is extending Informix to completely new areas, and I dare to say no other "traditional" RDBMS has seen such a transformation, or better saying adaptation to new requirements and new realities as Informix. As usual I'll pick up the official new feature list and I'll add my comments:

    • Migration
      • Server changes * Enterprise Replication conversion and reversion requirements * JSON compatibility conversion and reversion requirements
        Just a few notes you should consider when doing upgrades/downgrades
      • Easier to import tables with large rows
        A feature that tries to avoid getting too large extents while importing tables with large LVARCHAR columns. With the new option "-D" the extents will be 16KB. If I was asked I'd say I would prefer to let the user to specify the value... Although I understand the issue, 16KB may be too little...
    • Installation
      • Easier installation of 32-bit programs on Windows 64-bit operating systems
        No more need to alter the PATH before installing a 32 bit program in 64 bit Windows
      • Uninstall Informix programs on Windows from the Control Panel
        More convenient
    • Administration
      • Multitenancy in Informix
        Ok... this one deserves a post by itself. You may notice that one of our competitors created a large fuss around something very similar, and that was the big feature of a major release. We introduce it in a discrete fixpack. This fits perfectly in the overall picture of Informix vs other RDBMS. Basically we're build upon the concept of database inside an instance, something we've always supported (as well as in DB2 for that matter). In this fixpack we can now specify a class of CPU VPs and associate it with a "tenant" (CPU resource control), define the number of locks per session on that database, and associate a set of regular and temporary dbspaces for it. No objects from other databases will be allowed on that set of dbspaces, and that database objects can't be created outside of those dbspaces. Temporary dbspaces can however be used by different tenant sessions.
        If you think about it, this looks a simple extension to the database concept. But if you think a bit further you can easily find more things you'd like to do with these new tenants... Some can be "emulated" (I'm thinking about sessions per tenant). Others no, but I'd bet money on the idea that this will be continuously extended in the future
      • Enhancements to OAT
        As usual, new engine features force new functionalists in OAT. Tenant management, in place alter elimination (provided through a task) and a few more
      • Easier removal of outstanding in-place alter operations
        A new SQL Admin API function to eliminate existing in-place alters. This may help avoid more work during the DML operations on tables with these alters. As mentioned before OAT can be used to configure this
      • Limit the size of extendable storage spaces
        Set up a limit for auto expansion of dbspaces/chunks. Useful in any case, but particularly needed for tenants
      • Limit the number of locks for a session
        Finally this undocumented feature becomes officially. Can be set through $ONCONFIG or SET ENVIRONMENT....
      • New default mode for the VP_MEMORY_CACHE_KB configuration parameter
        This parameter specifies the amount of memory cache each CPU VP can use. It was recently extended to have a second option (STATIC, DYNAMIC) do define if it would automatically grow. Now the default changed from DYNAMIC to STATIC
    • Replication
      • Enhancements to the Enterprise Replication apply process and memory pool allocation
        A new CDR_MEM parameter controls the way memory for enterprise replication is allocated. Two new methods are provided for a trade off between memory consumption and performance
      • Replicate hertz and compressed time series data
        ER now allows the replication of both hert (sub-second frequency) and compressed Time Series data. This means these can be used in ER and GRID environments
      • New event alarm for blocked replication transactions
        A new event alarm can now be triggered if transactions are being blocked because a table is in ALTER mode
    • Performance
      • Faster storage optimization
        The compress, uncompress, and repack operations can now be done in parallel by using that option in the commands. It's allowed both for tables and indexes
      • Faster queries with UNION ALL views
        An optimization that tries to avoid the materialization of these type of views. Naturally without materialization, the queries can bu (much) faster
    • Application development
      • Customize the display widths of Unicode private-use characters
        Hopefully most of us won't have to deal with this, but for people using Unicode Private Use Area (PUA), the character base tools now allow the user to specify the display length of each character in that area. In order to do that a user needs to set IFX_PUA_DISPLAY_MAPPING environment variable and create a mapping file in $INFORMIXDIR/gls/etc/pua.map, specifying each character length (1 or 2, 1 being the default)
      • SQL compatibility: LIMIT clause allowed after the Projection clause
        A simple SQL compatibility feature. We could already specify the maximum number of rows in a result set by using the LIMIT option in the projection clause:
        SELECT LIMIT 2 * FROM systables ORDER BY 1
        Now we can specify LIMIT as a clause:
        SELECT * FROM systables ORDER BY 1 LIMIT 2
    • JSON compatibility
      • Enhanced JSON compatibility
        As we've seen in previous fixpacks, the JSON functionality is an hot topic. Some of the features included in this fixpack are:
        • Cursor support so that you can query large volumes of data
        • Text search of string content in collections and tables
        • Geospatial indexes and queries
        • Pipeline aggregation operators
        • The array update modifiers: $each, $slice, $sort
        •  Import and export data directly with the wire listener by using the Informix JSON commands exportCollection and importCollection.
        • Configure a strategy for calculating the size of your database by using the Informix extension to the MongoDB listDatabases command: sizeStrategy option or command.listDatabases.sizeStrategy property. 
        • Customize the behavior of the wire listener by setting new properties. For example:
          • logging,
          • caching
          • timeout
          • memory pools
          • maximum size of documents.
      • Access Informix from REST API clients
        The JSON wire listner can be configured to answer REST API requests. These will use the MongoDB syntax and return JSON documents, but can access MongoDB collections, traditional tables and time series data.
        This makes it easy to interact with the database without installing drivers, just by using these methods.
      • Create a time series with the REST API for the MongoDB API
        The REST API can be used to create a time series. Before you'd have to create it using standard SQL.
      • Basic text searching support for JSON and BSON data
        Basic Text Search datablade was extend to allow indexes over JSON/BSON datatypes. The index can be created and used both through SQL and MongoDB API. BTS supports specific options for JSON documents as it did before for XML for example
      • Access BSON data from JDBC client applications
        The JDBC driver now provides a JSON  object class called IfxBSONObject
      • Quickly export relational tables to BSON or JSON documents
        Easier export of relational tables to BSON/JSON format by using the new function genBSON()
    • Time series
      • Include JSON documents in time series
        A BSON column can be included in a TimeSeries datatype. Ideal for sensors that collect data in BSON format. This can be used through teh REST API
      • Enhancements to the time series Java class library
        More usability for java programmers working with TimeSeries data
    • Security
      • PAM password authentication for DRDA connections
        A specific request from one of "my" customers (A dear customer if I may say so.). It seems weird that we didn't support PAM for DRDA connections. But as you know, PAM is one of my "pet" subjects, so I'd like to explain this. The way PAM is implemented in our engine, we allow the PAM modules to send challenges to the client. The client needs to register a function to handle (answer) these requests. So this means that the database communication protocol must be able to pass through these requests and respective answers. That was not a problem for SQLI which is only used by Informix. But DRDA is used by several databases (Informix, DB2 LUW, DB2 z/OS, DB2i and cloudscape/derby at least. DRDA is also a published standard. So changing it is not trivial. It's not the first time this holds us back, and I'm convinced it won't be the last. The solution was a compromise.... We accept PAM connections in password mode (challenges can't be used). That's not perfect, but it was easy to implement and fitted this customer needs.

    Versão Portuguesa
    Estou a atrasar-me imenso no meu objetivo de ter um artigo por semana, mas como tem sido hábito... trabalho... Mas não podia deixar passar esta oportunidade. O último fixpack do Informix foi disponibilidade há cerca de duas semanas. E a documentação online e os novos PDFs foram disponibilizados ao mesmo tempo. Tudo em simultâneo como deve ser. Aparentemente isto está a tornar-se um hábito, e embora fosse expectável, nem sempre aconteceu. Por isso sinto-me satisfeito que aparentemente tenham finalmente "entrado nos eixos".
    Vou repetir-me, mas sendo verdade não vejo porque o não deva fazer. Mais uma vez temos um fixpack cheio de novidades. Penso que a maioria dos nossos clientes nem se apercebe das mudanças que têm sido introduzidas no produto... E por "mudanças" quero dizer funcionalidades novas, já que as "antigas" continuam lá e de boa saúde. Mas em cada fixpack parece que as potenciais  utilizações e potenciais utilizadores são cada vez mais abrangentes. A IBM está a expandir o Informix para áreas completamente diferentes e novas e atrevo-me a dizer que nenhuma outra base de dados "tradicional" terá visto uma tão grande transformação, ou melhor dizendo, adaptação a novos requisitos e novas realidades como o Informix. Como habitualmente vou pegar na lista de novidades oficial e acrescentar os meus comentários.
    • Migração
      • Mudanças no servidor * Requisitos de conversão de Enterprise Replication * Requisitos de conversão e reversão de compatibilidade JSON
        Apenas algumas notas que devemos ter em conta ao preparar upgrades e downgrades
      • Mais fácil importar tabelas com registos longos
        Uma funcionalidade que tenta evitar obter extents demasiado grandes em tabelas com campos LVARCHAR grandes. Com a nova opção "-D" no dbimport os extnents serão de 16KB. Se me perguntassem, diria que o melhor era a opção permitir indicar o tamanho. Apesar de perceber o problema que está a tentar resolver, diria que 16KB também é demasiado pequeno
    • Instalação
      • Instalação mais fácil de programas de 32 bits em Windows de 64 bits
        Deixa de haver a necessidade de alterar a PATH antes de instalar uma versão de 32 bits num Windows de 64 bits
      • Desinstalação de programas Informix a partir do painel de controlo
        Maior conveniência
    • Administração
      • Multitenancy no Informix
        Ok... esta merece um artigo exclusivo."tenant" em Inglês quer dizer inquilino, ou arrendatário. Mutitenancy é um termo usado em TI para descrever o "alojamento" ou agrupamento de várias entidades sob uma única entidade de gestão e configuração. Poderá ter notado que um dos nossos concorrentes fez um grande alarido em torno de algo semelhante, e foi anunciado como uma grande funcionalidade (ou A grande funcionalidade) de uma versão principal. Nós introduzimos isto num fixpack discreto. Isto encaixa perfeitamente na imagem global do Informix vs outras bases de dados.
        Basicamente estamos a construir sobre o conceito de uma base de dados dentro de uma instância, algo que sempre suportámos (e já agora o DB2 também). Neste fixpack introduzimos algumas capacidades adicionais: Ter uma classe de CPU VPs e associá-la a um tenant (controlo de recurso de CPU), definir o número de locks por sessão nessa base de dados e associar um conjunto de dbspaces só para ela. Objectos de outras bases de dados não serão aceites neste conjunto de dbspaces, e os objectos desta base de dados não podem ser alocados noutros. No entanto dbspaces temporários podem ser partilhados.
        Se pensarmos sobre isto parece uma simples extensão ao que já existia, ou seja o conceito de base de dados. mas se insistirmos no tema, facilmente encontramos coisas que gostaríamos de fazer com estes novos tenants... algumas poderão ser "emuladas" (estou a pensar num limite de sessões por tenant). Outras nem tanto, como seja limitar a memória ou logical logs usados por cada um. Por isso apostaria dinheiro na ideia que isto será um ponto de evolução permanente a partir de agora.
      • Melhorias no OAT
        Como é habitual, novas funcionalidades do motor, implicam novas funcionalidades do OAT. A gestão dos tenants e eliminação de inplace alters pendentes são dois exemplos.
      • Mais fácil remoção de inplace alters
        Uma nova função SQL permite eliminar inplace alters pendentes em tabelas. Um inplace alter será o que resulta de um ALTER TABLE que não tenha refeito a tabela. Ou seja, enquanto houver páginas que fisicamente estão na versão anterior, considera-se uminplace alter pendente. A remoção destas situações pode fazer-se com dummy updates (SET col1 = col1 WHERE 1 = 1). Isto evita que durante UPDATES e DELETEs o motor tenha de converter o formato das páginas que contenham registos alterados.
        Esta nova tarefa facilita a remoção destas situações. Como mencionado anteriormente, o OAT pode ser usado para gerir esta tarefa.
      • Limitar o tamanho dos espaços de alojamento extensíveis.
        Podemos agora definir um limite máximo para os chunks/dbspaces que estejam em auto extend. Bastante útil em qualquer caso, mas faz ainda mais sentido se conjugado com o conceito de tenants
      • Limitar o número de locks  por sessão
        Finalmente esta funcionalidade não documentada torna-se oficial. Pode ser definido no $ONCONFIG ou com a instrução SET ENVIRONMENT
      • Novo valor por omissão do parâmetro VP_MEMORY_CACHE_KB
        Este parâmetro específica a quantidade de cache de memória que cada CPU VP pode usar. Foi recentemente estendida para podermos definir com uma segunda opção (DYNAMIC, STATIC) se seria dinâmica ou estática. O comportamento por omissão agora será STATIC (podendo ser definido como DYNAMIC)
    • Replicação
      • Melhorias no processo de aplicação de dados replicados e na alocação de memória no Enterprise Replication
        Um novo parâmetro CDR_MEM controla a forma como a memória para enterprise replication é alocada. Dois novos métodos fornecem opções que permitem um trade-off entre consumo de recursos e performance.
      • Replicação de TimeSeries comprimidos e do tipo hertz
        O ER permite agora replicar hetrz (frequência sub-segundo) e TimeSeries normais comprimidos.Assim ambos podem ser usados em ambientes ER e GRID
      • Novo evento com alarme para bloqueios em transações replicadas
        Este alarme irá disparar se houver transações bloqueadas devido à colocação de uma tabela em modo ALTER
    • Performance
      • Otimizações de storage mais rápidas
        O compress, uncompress e repack podem agora ser executados em paralelo usando a opção parallel das respetivas funções. Isto aplica-se tanto a tabelas como índices
      • Queries sobre views com UNION ALL mais rápidas
        Uma otimização que tenta evitar a materialização de views deste tipo. Naturalmente sem materialização as queries poderão correr (muito) mais rápido
    • Desenvolvimento de aplicações
      • Configuração do tamanho de apresentação dos caracteres de uso privado do UNICODE
        Em princípio a maioria de nós não terá de se preocupar com isto, mas para quem use  Unicode Private Use Area (PUA), as ferramentas em modo carácter permitem agora a especificação da dimensão de cada um desses caracteres. Para o fazer temos de definir a variável de ambiente IFX_PUA_DISPLAY_MAPPING e criar um ficheiro de mapeamento em $INFORMIXDIR/gls/etc/pua.map, indicando para cada carácter a dimensão de apresentação (1 ou 2, sendo 1 o valor por omissão)
      • Compatibilidade SQL: cláusula LIMIT permitida depois da cláusula de projeção
        Uma funcionalidade de compatibilidade SQL simples. Já há muitos anos que podemos limitar o número de linhas no resultado de uma query usando a opção LIMIT na cláusula de projecção:
        SELECT LIMUT 2 * FROM systables ORDER BY 1
        Agora podemos também usar o LIMIT como cláusula:
        SELECT * FROM systables ORDER BY 1 LIMIT 2
    • Compatibilidade JSON
      • Melhorias na compatibilidade JSON
        Como temos visto em fixpacks anteriores, a funcionalidade JSON tem sido um tópico quente. Algumas das funcionalidades introduzidas agora são:
        • Suporte para cursores de forma a que seja possível tratar grandes quantidades de dados
        • Procura de texto em tabelas e collections
        • Queries e índices Geo-Espaciais
        • Operadores de agregação pipeline
        • Modificadores de update de arrays: $each, $slice, $sort
        • Importação e exportação de dados directamente com o wire listener utilizando os comandos Informix JSON exportCollection e importCollection
        • Configurar uma estratégia para calcular o tamanho da sua base de dados utilizando a estensão Informix ao comando MongoDB listDatabases: opção sizeStrategy ou a propriedade command.listDatabases.sizeStrategy
        • Configurar o wire listener através de novas propriedades. Por exemplo:
          • logging,
          • caching
          • timeout
          • memory pools
          • tamanho máximo dos documentos
      • Aceder ao Informix através de clientes de REST API
        O wire listener para JSON pode ser configurado para responder a pedidos REST API. Estes usarão a sintaxe do MongoDB e retornarão documentos JSON. Mas podem aceder a collections MongoDB. tabelas tradicionais e dados TimeSeries
        Isto torna o acesso à base de dados mais simples para casos onde a instalação de drivers e uso das APIs tradicionais seja mais complicado
      • Criação de um TimeSeries através a REST API, sobre a MongoDB API
        A API REST pode ser usada para criar um TimeSeries. Antes seria necessário criá-lo com SQL podendo depois usá-lo através do JSON wire listener
      • Suporte BTS para dados JSON e BSON
        O Basic Text Search datablade foi estendido para suportar índices sobre dados JSON/BSON. O índice pode ser criado e utilizado tanto via SQL como com MongoDB API. O BTS passa a suportar opções específicas para documentos JSON como já suportava por exemplo para XML
      • Aceder a dados BSON de aplicações cliente JDBC
        O driver JDBC fornece agora uma classe de objeto JSON chamada IfxBSONObject
      • Exportar rapidamente dados de tabelas relacionais para documentos BSON ou JSON
        Através da nova função genBSON() pode exportar-se os dados de tabelas relacionais, convertendo-os para BSON ou JSON
    • Time series
      • Inclusão de documentos JSON em TimeSeries
        Pode incluir-se uma coluna BSON num tipo de dados TimeSeries. Ideal para sensores que recolham ou produzam dados em formato JSON. Isto pode ser usado através da REST API
      • Melhorias na classse TimeSeires da biblioteca de Java
        Maior usabilidade para programadores Java que trabalhem com dados TimeSeries
    • Securança
      • Autenticação por password, usando PAM com DRDA
        Um pedido específico de um dos "meus" clientes (um cliente bastante apreciado se o posso dizer). Pode parecer estranho que não suportássemos PAM em conexões DRDA. Mas como saberão, o PAM é um dos meus temas "de estimação" e por isso gostaria de explicar isto. A forma como o PAM está implementado no nosso motor, permite que os módulos PAM enviem "desafios" aos clientes. O cliente tem de registar uma função ou método para lidar e responder a estes desafios. Ora isto implica que o protocolo de comunicação saiba lidar e preveja o envio destes pedidos e respetivas respostas. Issso não foi um problema para o SQLI, que apenas é usado pelo Informix. Mas o DRDA é usado por várias bases de dados (Informix, DB2 LUW, DB2 z/OS, DB2i e  Cloudscape/Derby pelo menos). DRDA é também um standard público e publicado. Assim, mudar o protocolo não é trivial e envolve processos formais e morosos. Não é a primeira vez que isso nos causa problemas e presumo que não será a última. A solução encontrada foi um compromisso... Aceitamos ligações DRDA com PAM desde que estejam em modo "password" (desafios não podem ser usados. Isto não será o ideal mas terá sido (muito) fácil de implementar e foi ao encontro das necessidades do cliente.