martinjevans's blog

New development release of Perl DBD::Oracle

Yanick has just released a new development release of DBD::Oracle DBD-Oracle-1.43_00. As I mentioned in my blog a week or so ago, this release has a huge number of lines of code changed to remove the use of DBIS (see Changes to make DBIS more efficient and speeding up XS_DBI_dispatch()). This release removes the last few DBIS calls. As a result, if you are using a Perl built for threads (useithreads=define) this release is significantly faster than previous releases.

I've seen CPU usage nearly halved on fetches of large numbers of rows and I've had reports where people are doing lots of different selects for small numbers of rows of up to 10* quicker.

If you depend on DBD::Oracle you are strongly advised to try this version as this was over a 160K diff when I checked it in. If you notice anything broken please post an example to the dbi-users list.

A list of changes in this release is:

New development release of perl DBD::ODBC

I have released DBD::ODBC 1.36-1 to cpan. With hindsight I was probably too ambitious releasing 1-35 with the default for execute_for_fetch enabled. This decision was based on a) my experience with writing bound arrays of parameters in the ODBC-ODBC Bridge b) I knew some drivers would have issues but I thought this might encourage fixes c) it is so much faster. As it turns out I am seeing issues currently with SQLite, Freetds, MS Access and even MS SQL Server.

Faster DBD::Oracle if you are using a threaded Perl

Thanks to Dave Mitchell for finding this, see Changes to make DBIS more efficient and speeding up XS_DBI_dispatch(). If you are using a Perl built with thread support (useithreads=define) a number of DBDs use DBIS macros from DBI which are expensive in a threaded Perl and no longer neccessary. The threads referenced above have all the gory details.

This week I've attempted to remove all DBIS usage from DBD::Oracle and have managed in all but a couple of cases. If you upgrade to DBI 1.618 and get the latest DBD::Oracle from subversion trunk (see How to create a patch using Subversion you could see a pretty substantial speed up.

New 1.35 release of Perl DBD::ODBC

I've uploaded Perl DBD::ODBC 1.35 to CPAN.

This is the culmination of 7 development releases in the 1.34 chain and is a significant release containing a lot of changes and enhancements. As always I would like to thank everyone who has helped and especially CPAN testers. The full list of changes since the last official release is below.

New 1.34_5 release of Perl DBD::ODBC

My intention is to release this as 1.35 in the next week so if you find any issues please let me know soon.

=head2 Changes in DBD::ODBC 1.34_5 February 17 2012

[BUG FIXES]

* The 40UnicodeRoundTrip tests counts could be 1 off in some cases.

* Fix for t/03batt.t which could fail a test if the data source had
no table - Kenichi Ishigaki

* If a driver misbehaves during global destruction e.g. SQLFreeStmt
fails but no error is available DBD::ODBC issues an error saying
an error occurred but no error diagnostics could be found. This is

New 1.34_4 release of Perl DBD::ODBC

I've uploaded DBD::ODBC 1.34_4 to CPAN.

This release contains all changes/fixes/enhancements since 1.33 and also the new odbc_getdigarec and odbc_getdiagfield methods.

=head2 Changes in DBD::ODBC 1.34_4 February 5 2012

[BUG FIXES]

* When odbc_getdiag* methods were added they installed themselves
into DBI but did not set IMP_KEEP_ERR so calling them cleared
DBI's errors.

=head2 Changes in DBD::ODBC 1.34_3 February 3 2012

[BUG FIXES]

* Linking against unixODBC was working by accident on most UNIX

ORA-00604: error occurred at recursive SQL level 1, ORA-22914: DROP of nested tables not supported

In the last few days we've suddenly started getting this error. The really weird thing is we get this when inserting data into a table! There was a trigger on the table we were inserting into so I disabled it but the problem did not go away. In fact it was easily reproducible with a simple insert into the "problem" table. Looking at the table in question it had around 500000 rows and included a clob but other than that nothing special. Since this is only a development system we deleted all the rows in the table and reenabled the trigger and the problem went away.

New Humax foxsat-hdr satellite box

I've just bought a new Foxsat-HDR to replace a previous Foxsat-HD and more importantly free up my Digital Pioneer freeview PVR as we've just lost the analogue signal and my other Panasonic PVR/DVD player in another room is analogue.

execute_for_fetch experimental support now in Perl DBD::ODBC 1.34_1

I have uploaded DBD::ODBC 1.34_1 to CPAN. This release adds very experimental support for a native execute_for_fetch method to DBD::ODBC which means you can do multiple row inserts/updates/deletes much quicker than using DBI's default execute_for_fetch (so long as you are using execute_for_fetch or execute_array and using column-wise binding).

Native execute_for_fetch support can often be as much as 30 or 40 times faster in my experiments (depending on data sent and odbc_batch_size) when inserting rows and even more if you do it in a transaction and even faster if you disable index updates until after the commit. Read on for why.

By default DBD::ODBC will use the new execute_for_fetch and there are some differences between what happens when you use DBD::ODBC with DBI's default execute_for_fetch and DBD::ODBC's. To disable the ODBC one you can set the new odbc_disable_array_operations attribute. I've listed the potential difference below. I'd love people to test this. It may be missing some special workarounds for a few drivers but I'm working my way through those.

New 1.33 release of Perl DBD::ODBC

I've just uploaded DBD::ODBC 1.33 to CPAN.

This release contains no new changes since the 1.32_5 development release but is the official release for all the 1.32 dev series. The complete changes can be found below. The main thrust has been Unicode improvements.

The most significant enhancements are:

  • unicode support for catalog/schema/table/column names in table_info and column_info
  • now using SQLGetTypeInfoW on unicode builds
  • new odbc_driver_complete attribute to allow interaction with ODBC dialogs on Windows.
    I'd really like to hear from anyone who uses this as I've had no feedback so far - just drop me an email if you have
  • and bug fixes:

    • remove a debugging printf - sorry, most embarrassing.
Syndicate content