On behalf of CUBRID Team I am happy to announce the new 8.4.4 version of CUBRID open source relational database. This release is mostly dedicated for stability improvement of the 8.4 branch, and has some minor behavioral changes which I will explain below. Thus, CUBRID 8.4.4 is fully compatible with the previous 8.4.3 version.
If you have been following up with our latest releases, you may have noticed that we are maintaining two branches for CUBRID 8.4.x and 9.x. As 8.4.0 release introduced major changes and extended support for MySQL compatible SQL, many users have started using or migrated to it. In fact, there are more 8.4.x users than 9.x at this moment. For this reason, we bring common bug fixes applied to the successor 9.x branch down to 8.4.x branch. This way we make sure users of the 8.4.x branch have the latest improvements.
New Features
Since this is a stability improvement release, there are no other new features except the SQL profiling which is brought down from the upcoming 9.2 release.
SQL profiling
Prior to 8.4.4 users could obtain SQL profiling information to analyze the query performance only in desktop GUI applications like CUBRID Manager or CUBRID Query Browser. Now CUBRID allows to retrieve SQL profiling information directly from drivers. To enable the SQL profiling one can execute SET TRACE ON
before executing the query, then retrieve the query plan and statistics by executing SHOW TRACE
query. See the following example:
csql> SELECT /*+ RECOMPILE */ o.host_year, o.host_nation, o.host_city, n.name, SUM(p.gold), SUM(p.silver), SUM(p.bronze)
FROM OLYMPIC o, PARTICIPANT p, NATION n
WHERE o.host_year = p.host_year AND p.nation_code = n.code AND p.gold > 10
GROUP BY o.host_nation;
csql> SHOW TRACE;
trace
======================
'
Query Plan:
SORT (group by)
NESTED LOOPS (inner join)
NESTED LOOPS (inner join)
TABLE SCAN (o)
INDEX SCAN (p.fk_participant_host_year) (key range: (o.host_year=p.host_year))
INDEX SCAN (n.pk_nation_code) (key range: p.nation_code=n.code)
rewritten query: select o.host_year, o.host_nation, o.host_city, n.[name], sum(p.gold), sum(p.silver), sum(p.bronze) from OLYMPIC o, PARTICIPANT p, NATION n where (o.host_year=p.host_year and p.nation_code=n.code and (p.gold> ?:0 )) group by o.host_nation
Trace Statistics:
SELECT (time: 1, fetch: 1059, ioread: 2)
SCAN (table: olympic), (heap time: 0, fetch: 26, ioread: 0, readrows: 25, rows: 25)
SCAN (index: participant.fk_participant_host_year), (btree time: 1, fetch: 945, ioread: 2, readkeys: 5, filteredkeys: 5, rows: 916) (lookup time: 0, rows: 38)
SCAN (index: nation.pk_nation_code), (btree time: 0, fetch: 76, ioread: 0, readkeys: 38, filteredkeys: 38, rows: 38) (lookup time: 0, rows: 38)
GROUPBY (time: 0, sort: true, page: 0, ioread: 0, rows: 5)
Improvements
In CUBRID 8.4.4 there are tons of stability and usability improvements which include the following list of improvements of administrative functions.
- Administrative Convenience
- One of the major improvement is the SQL profiling which I've already explained above.
- Added a command line utility to output the parameter information of running brokers or shards.
- Added tranlist utility to display a list of active transaction throughout all CAS processes.
- Sort the output of the tranlist command by the specified column.
- Now killtran utility can also remove transactions by SQL ID.
- To remove multiple transactions at once -i option of killtran utility can be used.
- Added an additional event log file to record query status information such as SLOW_QUERY, MANY_IOREADS, LOCK_TIMEOUT, DEADLONG, and TEMP_VOLUME_EXPAND which affect the query performance.
- cubrid_master log file now includes each node information in the output of HA status.
- HA
- An option to change the failover method in HA environment.
- Sharding
- Now it's possible to print the shard ID for the shard key in the command line by running cubrid shard getid command.
- cci_set_db_parameter function can be used in SHARD environment.
- The password of shard DB can be also specified with an environment variable.
- Configuration
- Shard-related processes are started or terminated by using the "cubrid service" command.
- Added a parameter to adjust the maximum number of replication archive logs.
- Added a system parameter to specify transaction rollback when lock escalation occurs.
- Performance
- Query plan is rewritten when the proper data volume is exceeded during the re-executuion of prepare for the same query statement.
- Statistical information of only the added index is updated.
- Reduced time to fork new CAS processes.
Behavioral changes
Some of the functionality in CUBRID 8.4.4 has been changed.
- SQL
- When a column without a default value is added by using the ALTER ... ADD COLUMN statement, the PRIMARY KEY or NOT NULL constraint was violated as all values of the added columns became NULL. This problem has been fixed.
- Failure to repeat INSERT in the array/batch executive function after executing PREPARE without committing a newly-created table
- Driver
- In JDBC code changed the zero date of TIMESTAMP from '0001-01-01 00:00:00' to '1970-01-01 00:00:00'(GST) when the value of zeroDateTimeBehavior in the connection URL is "round".
- In JDBC and CCI drivers query timeout is now applied to the batch processing function not per query when execution multiple queries at once.
- Utility
- Configurations
- Changed the time and capacity related parameter names to allow to set time unit or capacity unit next to the time or capacity parameter value.
- Changed the upper limit of the sort_buffer_size system parameter to 2G.
- Removed OFF option from KEEP_CONNECTION broker parameter.
- Changed APPL_SERVER_MAX_SIZE_HARD_LIMIT broker parameter.
- Changed the default value of SQL_LOG_MAX_SIZE broker parameter from 100MB to 10MB.
- Other
Besides these improvements and behavioral changes, there are many bug fixes and minor improvements. For the full list refer to CUBRID 8.4.4 Release Notes.
What's next
In a week or so we will release a new version of 9.x branch which will carry the 9.2 label. We will explain about the new features of 9.2 in a separate post.
If you have any questions, feel free to leave your comment below.