<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3392197078789890903</id><updated>2012-02-08T09:20:26.470-05:00</updated><category term='Oracle DB2 Sybase MySQL PostGreSQL Informix database'/><category term='MS SQL Server'/><title type='text'>Informix - My view</title><subtitle type='html'>A place to share my views and ideas which may be of interest to the Informix user Community.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-564458611925792363</id><published>2012-02-08T09:20:00.001-05:00</published><updated>2012-02-08T09:20:26.476-05:00</updated><title type='text'></title><content type='html'>It seems that my friends at Oninit UK have worked with i2Global to port the excellent open source CRM SugarCRM to use Informix as its repository.&amp;nbsp; It will be no surprise to us that with Informix standing behind it, SugarCRM now scales much better than it did with its default repository RDBMS.&amp;nbsp; Duh!&lt;br /&gt;&lt;br /&gt;When is IBM going to get it that they have the best database without peer in Informix and finally get 100% behind it?&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-564458611925792363?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/564458611925792363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2012/02/it-seems-that-my-friends-at-oninit-uk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/564458611925792363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/564458611925792363'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2012/02/it-seems-that-my-friends-at-oninit-uk.html' title=''/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-7108960897837431304</id><published>2011-12-14T10:58:00.002-05:00</published><updated>2011-12-14T15:23:10.867-05:00</updated><title type='text'>Solution to a problem</title><content type='html'>I received an email this morning with a link to a Linked-In post that pointed to someone's BLOG.&amp;nbsp; The Blogger was proposing a solution to a problem someone had presented to him at work that he thought was rather elegant and so posted it for the consumption and edification of the Linked-In community.&amp;nbsp; The problem:&amp;nbsp; In a single SQL statement register an attendee for an event unless the attendee is already registered for an overlapping event.&amp;nbsp; The solution was, to me, overly complex and absolutely non-portable in that it takes advantage of Oracle's conditional INSERT statement, so I said to myself: "How would I solve this better and in a fairly portable fashion?"&amp;nbsp; So, presented here is my solution:&lt;br /&gt;&lt;br /&gt;Setup:&lt;br /&gt;-- Table attendee( attendee_id serial, name char(40) );&lt;br /&gt;-- Table event( event_id serial, title char(80), start_time datetime year to minute, end_time datetime year to minute, location char(10) );&lt;br /&gt;-- Table attendance( attendee_id int, event_id int, register_time datetime year to fraction(3), attended boolean );&lt;br /&gt;&lt;br /&gt;Assume all tables have the appropriate RI constraints and indexes in place. &lt;br /&gt;&lt;br /&gt;I propose that a simple INSERT TRIGGER (and yes an UPDATE trigger would also be appropriate but I leave that to the reader as an exercise) is the correct, simple, and portable solution:&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE attendee_check() REFERENCING NEW AS neu FOR attendance;&lt;br /&gt;&lt;br /&gt;DEFINE clash INT;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT count(*)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO clash&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM attendee AS a, event AS e1, attendance AS ae, event AS e2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE a.attendee_id = neu.attendee_id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND e1.event_id = neu.event_id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND ae.attendee_id = a.attendee_id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;AND e2.event_id = ae.event_id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;AND e1.start_time &amp;lt;= e2.end_time&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;AND e1.end_time &amp;gt;= e2.start_time&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;AND e2.event_id != e1.event_id;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF (clash &amp;gt; 0) THEN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; RAISE EXCEPTION -746, 0, "Overlapping Event Rejected!";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END IF&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RETURN;&lt;br /&gt;&lt;br /&gt;END PROCEDURE;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TRIGGER attend_trig_i INSERT ON attendance&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; REFERENCING NEW as neu&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FOR EACH ROW &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( EXECUTE PROCEDURE attendee_check( ) WITH TRIGGER REFERENCES );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- Attendees &lt;br /&gt;insert into attendee( 0, 'Art' );&lt;br /&gt;insert into attendee( 0, 'Fred' );&lt;br /&gt;insert into attendee( 0, 'Barney' );&lt;br /&gt;&lt;br /&gt;-- Events&lt;br /&gt;insert into event values( 0, 'Event 1',&amp;nbsp; '2011-12-28 09:00', '2011-12-28 10:00', 'Here');&lt;br /&gt;insert into event values( 0, 'Event 2',&amp;nbsp; '2011-12-28 09:00', '2011-12-28 10:00', 'There');&lt;br /&gt;insert into event values( 0, 'Event 3',&amp;nbsp; '2011-12-28 09:30', '2011-12-28 10:30', 'Elsewhere');&lt;br /&gt;insert into event values( 0, 'Event 4',&amp;nbsp; '2011-12-28 10:30', '2011-12-28 11:30','Elsewhen');&lt;br /&gt;&lt;br /&gt;-- Test:&lt;br /&gt;&amp;gt; insert into attendance (attendee_id, event_id, register_time, attended ) values ( 1, 1, current, 'f' );&lt;br /&gt;&lt;br /&gt;1 row(s) inserted.&lt;br /&gt;&lt;br /&gt;&amp;gt; insert into attendance (attendee_id, event_id, register_time, attended ) values ( 1, 4, current, 'f' );&lt;br /&gt;1 row(s) inserted.&lt;br /&gt;&lt;br /&gt;&amp;gt; insert into attendance (attendee_id, event_id, register_time, attended )  values ( 1, 1, current, 'f' );&lt;br /&gt;&amp;nbsp; 268: Unique constraint (informix.attendance_pk) violated.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 100: ISAM error:&amp;nbsp; duplicate value for a record with unique key.&lt;br /&gt;Error in line 1&lt;br /&gt;Near character position 51&lt;br /&gt;&amp;gt; insert into attendance (attendee_id,event_id,&amp;nbsp; register_time, attended )  values ( 1, 2, current, 'f' );&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 746: Overlapping Event Rejected!&lt;br /&gt;Error in line 1&lt;br /&gt;Near character position 1&lt;br /&gt;&amp;gt; insert into attendance ( attendee_id, event_id, register_time, attended )  values ( 1, 3, current, 'f' );&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 746: Overlapping Event Rejected!&lt;br /&gt;Error in line 1&lt;br /&gt;Near character position 1&lt;br /&gt;&amp;gt; &lt;br /&gt;select * from attendance;&lt;br /&gt;&lt;br /&gt;attendee_id&amp;nbsp;&amp;nbsp;&amp;nbsp; event_id signup_time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; attended &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 2011-12-14 10:48:11.221&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 2011-12-14 10:49:21.361&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f&lt;br /&gt;&lt;br /&gt;2 row(s) retrieved.&lt;br /&gt;&lt;br /&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;Simple, elegant, and except for the details of the syntax of the stored procedure (and in some cases the trigger) it is portable and can be implemented in most RDBMSes, unlike the original solution.&amp;nbsp; The final advantage is that this solution will prevent overlapping registrations no matter who writes the application making the insert which is now a simple insert.&amp;nbsp; The application developer is not required to know in advance that he has to meet this requirement (as obvious as it should be ;-).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-7108960897837431304?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/7108960897837431304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2011/12/solution-to-problem.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/7108960897837431304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/7108960897837431304'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2011/12/solution-to-problem.html' title='Solution to a problem'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-5272960365326666359</id><published>2011-08-09T14:07:00.000-04:00</published><updated>2011-12-16T09:52:54.647-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle DB2 Sybase MySQL PostGreSQL Informix database'/><category scheme='http://www.blogger.com/atom/ns#' term='MS SQL Server'/><title type='text'>The best database for every purpose!</title><content type='html'>As a consultant I often am asked "What is the best database for everything we do?"  Unfortunately, there is no easy answer for that, and I know this is not the response you all expect from me.  Bear with me on this and I will explain.&lt;br /&gt;&lt;br /&gt;The best database, and to be clear by 'database' I mean Database Management System, is not MySQL, PostGreSQL, Ingres, Oracle, Sybase, IBM DB2 branded products, IBM's Informix branded products, Voltdb, OpenSQL, Berkeley DB, Progress, Unify, MS SQL Server, or any of the literally hundreds of other RDBMS products on the market whether they are free or for-cost.  No single database product can serve all of the needs of any large organization nor for most smaller organizations.  That's a fact!  While I think that IBM Informix Dynamic Server Ultimate Edition is the cats meow of RDBMS products, the performance, feature, and innovation leader in my book, it is not best for every purpose in every organization.&lt;br /&gt;&lt;br /&gt;So, the question remains out there: "What is the best database for ...", what do I recommend?  Because if my clients have to use a different database server product for each group of applications that fit best, or even groupings that are sometimes second best, they are still going to have to maintain and be able to manage and tune several products from several companies won't they?  The list of skill sets that their DBAs will need will be very broad and I will have to hire more DBAs than I might need if I could just use one product.&lt;br /&gt;&lt;br /&gt;I've been thinking about this for a while, and I keep coming back to the marketing presentation I made to IBM two years ago and to how appropriate that was to this question even more so than to the question of how IBM should market its database products.  If my clients could get the "right" database, or close enough, for every situation from a single vendor, and if that vendor could make the skills needed to manage all of those database products they market sufficiently portable, that would reduce my clients' costs of ownership substantially making this single vendor solution even more attractive.&lt;br /&gt;&lt;br /&gt;OK, so what product lines are out there?  Oracle effectively has MySQL for very small projects and their Enterprise Class Oracle server in its various "editions".  Sybase has an Enterprise class server and a mobile server.  Ingres has only an Enterprise class server but not much third party software support left.  Progress is a good SMB server only.  Same with Unify.  PostGreSQL has many nice enterprise class features but not all and many organizations won't bet the ranch on an open source product that doesn't have corporate support behind it.&amp;nbsp; Microsoft has only SQL Server in its two editions.  That brings us to IBM which, as I pointed out two years ago, has a plethora or database management systems appropriate for any size organization and any task:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;C-ISAM and IMS for application level databases.&lt;/li&gt;&lt;li&gt;IBM Informix Standard Edition for small business.&amp;nbsp; Clean simple OLTP performance for simple schema databases serving up to several hundred users with zero maintenance.&amp;nbsp; This is the original Informix database server and it is still a viable product for the right organization and project.&lt;/li&gt;&lt;li&gt;IBM Informix OnLine for small to medium business.&amp;nbsp; Clean simple OLTP performance for simple schema databases up to several TB in size serving up to several thousand users with extremely low maintenance and outstanding reliability and uptime.&amp;nbsp; This is the RDBMS that revolutionized the industry by finally allowing one to archive a database without having to take it offline or block transactions.&lt;/li&gt;&lt;li&gt;IBM Informix Dynamic Server (Innovator, Growth/Choice, and Ultimate Editions) for:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Medium to large business&lt;/li&gt;&lt;li&gt;OLTP performance and better than five-9s reliability&lt;/li&gt;&lt;li&gt;Medium to large Data Warehouse&lt;/li&gt;&lt;li&gt;Large Data Mart and DSS applications&lt;/li&gt;&lt;li&gt;Object Relational features&lt;/li&gt;&lt;li&gt;Industry leading expandability and extendability&lt;/li&gt;&lt;li&gt;Industry leading uptime and reliability with near zero unplanned outage and very low planned outage requirements&lt;/li&gt;&lt;li&gt;Industry leading TCO requiring 1/2 to 1/4 the DBA support of other RDBMS products&lt;/li&gt;&lt;li&gt;Databases up to 128PB serving many thousands of concurrent users&lt;/li&gt;&lt;li&gt;Industry leading replication and clustering technology that scales better than the competition&lt;/li&gt;&lt;li&gt;Unmatched embeddability with configurable footprint&lt;/li&gt;&lt;li&gt;Heterogeneous clusters of&amp;nbsp; hundreds of servers on different hardware and OS platforms without special backbones or infrastructure&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;IBM DB2 Mainframe for mainframe based applications&lt;/li&gt;&lt;li&gt;IBM DB2 LUW which fills most of the same niches as Informix Dynamic Server&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Strength in 3rd party application support&lt;/li&gt;&lt;li&gt;Very large data warehouses.&lt;/li&gt;&lt;li&gt;Distributed server&lt;/li&gt;&lt;li&gt;DB2 Pure Scale highly scalable homogeneous clustering&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;IBM Informix Ultimate Warehouse Edition with the Informix Warehouse Accelerator for accelerating complex data warehouse style queries by up to 300X without losing Informix's OLTP performance and features and without requiring expensive special purpose hardware.&lt;/li&gt;&lt;li&gt;Netezza provides performance even beyond Informix Ultimate Warehouse for dedicated DW applications that need ultimate speed.&lt;/li&gt;&lt;/ul&gt;So is IBM missing anything?&amp;nbsp; Yes!&amp;nbsp; It is missing a unified structure of management and maintenance tools that can cross and span the entire range of database products so that an organization's DBA skills can also span the product line.&amp;nbsp; Put that in place and two things happen:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I have the answer to my clients' questions and&lt;/li&gt;&lt;li&gt;IBM can approach the market with this now unified product line that no one can touch&lt;/li&gt;&lt;/ol&gt;&amp;nbsp;Instead of producing a white paper entitled "&lt;span style="font-size: small;"&gt;Six reasons to move from Oracle to IBM" which should really have been entitled &lt;/span&gt;"&lt;span style="font-size: small;"&gt;Six reasons to move from Oracle to IBM DB2" they can produce a white paper entitled &lt;/span&gt;"&lt;span style="font-size: small;"&gt;Sixty reasons to move from Oracle to IBM" that can highlight all of the benefits of using a unified database product line within your organization.&amp;nbsp; This makes IBM a one-stop-shop and makes my life as a consultant a whole lot easier.&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-5272960365326666359?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/5272960365326666359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2011/08/best-database-for-every-purpose.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/5272960365326666359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/5272960365326666359'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2011/08/best-database-for-every-purpose.html' title='The best database for every purpose!'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-7469389899896525511</id><published>2011-06-30T15:01:00.000-04:00</published><updated>2011-06-30T15:01:04.536-04:00</updated><title type='text'>IBM Finally Wakes Up</title><content type='html'>It looks like IBM took my test and passed!  On June 8, 2011, IBM in cooperation with SmartGRIDNews.com, ran a webinar presentation to over 450 Energy Industry executives and technologists.  The main thrust of the presentation was avoiding the pitfalls of implementing Smart Meter systems, however, more than 50% of the time was spent explaining how Informix is the only product that can handle the volume of data that smart data produces.  (See: http://www.smartgridnews.com/artman/publish/Video-Webinars/).  Kudos to IBM's Richard Wozniak (an old Informixer BTW) for a clear presentation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-7469389899896525511?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/7469389899896525511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2011/06/ibm-finally-wakes-up.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/7469389899896525511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/7469389899896525511'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2011/06/ibm-finally-wakes-up.html' title='IBM Finally Wakes Up'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-3073451754022204606</id><published>2011-06-16T09:45:00.000-04:00</published><updated>2011-06-16T09:45:25.748-04:00</updated><title type='text'>Dumb and Dumber</title><content type='html'>This is a quiz.  Just like the SATs/GREs/ACTs, first we have the story, then the questions to see if you are paying attention:&lt;br /&gt;&lt;br /&gt;Let's say I have a product that has a feature that a large segment of the market needs.  Let's add to this scenario that there is no other product that can fill the particular need as well.  There are competing offerings, but none will work as well, all will cost more to purchase than I will sell mine for, and all will cost the customer more to maintain and manage than using my product.  Being a poor historian I remember the bit of wisdom erroneously attributed to Ralph Waldo Emerson: "If you build a better mousetrap the world will beat a path to your door." (it was actually coined by Elbert Hubbard seven years after Emerson's death as something Mr. Emerson might have said if he had thought of it).  Taking that sentiment to heart I post a note in my BLOG, announce the product on my product's Facebook Wall and LinkedIn page and wait for the sales to roll in.&lt;br /&gt;&lt;br /&gt;When that doesn't work I hire some new sales people, move others from other products, and shuffle a successful sales leader from another product line over to head up a "SWAT Team" to go talk to all of my existing customers and try to get them to start using this peachy feature so I can generate some PR success stories about them that might prompt new customers to take a look at my product and this nifty feature.&lt;br /&gt;&lt;br /&gt;Question 1:&lt;br /&gt;The most likely outcome of this scenario is:&lt;br /&gt;a. I will sell thousands of new licenses for my product in just weeks.&lt;br /&gt;b. I may get a few existing customers to begin using this neat feature, but it will generate no new net licenses.&lt;br /&gt;c. Nothing.&lt;br /&gt;&lt;br /&gt;Answer: [ ]&lt;br /&gt;&lt;br /&gt;Question 2:&lt;br /&gt;The best word to describe me as a business man is:&lt;br /&gt;a. Entrepreneur&lt;br /&gt;b. Genius&lt;br /&gt;c. Market leader.&lt;br /&gt;d. Idiot&lt;br /&gt;&lt;br /&gt;Answer: [ ]&lt;br /&gt;&lt;br /&gt;Question 3:&lt;br /&gt;The response from existing customers to my efforts to get them to use the nifty feature will likely be:&lt;br /&gt;a. "Hey, this is really cool and fast and saves storage too!  Thanks!  When can I shoot my PR video?"&lt;br /&gt;b. "Dude!  We don't do that kind of stuff here, so I have no need for this nifty feature.  Sorry."&lt;br /&gt;c. "I know all about this feature, have for years.  Don't need it.  Go away!"&lt;br /&gt;&lt;br /&gt;Answer: [ ]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-3073451754022204606?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/3073451754022204606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2011/06/dumb-and-dumber.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/3073451754022204606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/3073451754022204606'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2011/06/dumb-and-dumber.html' title='Dumb and Dumber'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-6235492960928765145</id><published>2011-05-05T21:42:00.000-04:00</published><updated>2011-05-05T21:42:31.933-04:00</updated><title type='text'>AUS -versus- dostats</title><content type='html'>Do you like the idea of using the task manager to take care of update statistics tasks but prefer to use dostats than AUS (Auto Update Statistics) in 11.xx?&amp;nbsp; No problem, for several releases dostats_ng.ec has supported creating an AUS-like refresh function.&lt;br /&gt;&lt;br /&gt;For a while now I have noticed that clients that are trying to use AUS to manage their statistics on larger databases are experiencing problems with the system catalogs and some tables having data distributions that are out-of-date or insufficiently detailed.&amp;nbsp; Many are going back to using dostats with our help. &lt;br /&gt;&lt;br /&gt;In this entry I am going to show you how to completely replace AUS with dostats.&amp;nbsp; The steps are simple:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Get utils2_ak and build and install dostats (by default it is now built from the next generation dostats_ng.ec source).&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Get utils2_ak: This one is easy.&amp;nbsp; Go to the IIUG Software Repository (www.iiug.org/software) and download the package. &lt;/li&gt;&lt;li&gt;Build the package: Usually easy, on Linux and any platform with GNU Make and ESQL/C configured to use GCC, just type 'make'.&amp;nbsp; The file BUILDING and notes in the makefile (Makefile.nognumake) explain what to do if you have to use UNIX make and the native cc compiler on various platforms.&amp;nbsp; But this is also easy, it is usually a 5 minute task to modify the makefile for your platform - don't forget to modify the makefile in myschema.d if you want to build myschema as well.&amp;nbsp; If you are on AIX, you will also have to get my portable at utility "ar2" and compile and use that to extract the source for myschema from it's System V/POSIX format ar archive file.&amp;nbsp; If you have trouble - email me.&lt;/li&gt;&lt;li&gt;Install:&amp;nbsp; There is an 'install' target in the makefile, so you just have to edit the target path into which the files will be installed and "make install".&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Disable the AUS tasks in the task manager.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Easy Peasey.&amp;nbsp; You can do this in OAT or just go into dbaccess or OAT's SQL editor and run:&lt;br /&gt;UPDATE sysadmin:ph_task set tk_enable = 'f' where tk_name matches 'Auto *';&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Install new tasks.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;There are two tasks, the refresh and the evaluator.&amp;nbsp; The refresh is VERY easy because dostats takes care of that for you.&amp;nbsp; Configuring the evaluator is a bit trickier.&amp;nbsp; Fortunately, I've scripted the whole shebang for you.&amp;nbsp; The setup_dostats.ksh script below will take care of everything.&amp;nbsp;&lt;/li&gt;&lt;li&gt;There are three scripts below, setup_stats.ksh, evaluate_stats.ksh, and initial_stats.ksh&amp;nbsp; Just install all three scripts in your path and make two edits to customize the scripts for your environment:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&amp;nbsp;In setup_stats.ksh change the start_time to the time you want the refresh task to kick off and estart_time to the time you want the next day's evaluator task to kick off.&amp;nbsp; Normally you want the evaluator to run after the end of a normal day's processing cycles but before the refresh task.&amp;nbsp; The refresh task should probably run before large end-of-day processes to optimize their runs.&amp;nbsp; The evaluator takes about two minutes to process a 2000 table database.&lt;/li&gt;&lt;li&gt;Change the location of the environment setup script you use in all three scripts.&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;There is a line in each file, below the legend:&lt;/li&gt;&lt;li&gt;# Environment "dot" script &lt;/li&gt;&lt;li&gt;Change that next line to execute your environment file that gives access to the instance and which must also include the bin directory containing dostats and the scripts themselves in its PATH.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;   All three scripts take two arguments, the name of the database you are scheduling, and the path to the directory into which you want log files for the runs to be written. &amp;nbsp; The script setup_stats.ksh installs a stored procedure in the target database that runs the evaluate_stats.ksh script at the appropriate time, creates a table in sysadmin, dostats_stmts, to hold the set of commands for the refresh to run, creates the SPL procedure that executes the refresh commands and installs it as a task to be run daily at the appropriate times, and creates an initial set of commands for the first run.&lt;/li&gt;&lt;li&gt;As configured the evaluator script will use whatever thresholds for aging and browsing you have already set in OAT for AUS to use.&amp;nbsp; You can modify those settings in OAT or by editing the values stored in the tables in sysadmin, or you can edit the evaluate_stats.ksh script and replace --aus-thresholds with the -a -A [days] and -b -B [pct_chng] parameters.&lt;/pct_chng&gt;&lt;/days&gt;&lt;/li&gt;&lt;li&gt;&lt;days&gt;&lt;pct_chng&gt;The third script is just for you to use to unconditionally wipe clean your existing distributions and create a complete new set using dostats.&amp;nbsp; This will "prime the pump" for the aging threshold so that every table has the same initial starting point for its stats.&amp;nbsp; You will want to run this script once initially during a quite time on your system and again say monthly or quarterly just to get everything on an even keel again periodically. &lt;/pct_chng&gt;&lt;/days&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&amp;nbsp; &lt;br /&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;######&lt;br /&gt;#  setup_stats.ksh - Install a procedure to generate updated  data&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; distributions for the&amp;nbsp;named database.&lt;br /&gt;#&lt;br /&gt;# Written by: Art S.  Kagel, Advanced DataTools  Corp.&lt;br /&gt;#&lt;br /&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;######&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;dbs=$1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;logdir=$2&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;export start_time='03:00:00'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;export estart_time='00:00:00'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# Environment "dot" script &lt;/div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;. ~informix/ADTC/aliases.art&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;#&lt;br /&gt;# Install the initial evaluator procedure and  populate the dostats_stmts table with&lt;br /&gt;# an initial set of commands.&amp;nbsp;  Also schedules the refresh job to run at 3h&lt;br /&gt;#&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  dostats -d&amp;nbsp;$dbs -Q 100 -w 10  --aus-thresholds --isolation d -m --procedure dostats_refresh_$dbs --schedule --frequency d  --first-time $start_time&lt;br /&gt;&amp;nbsp;2&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;#&lt;br /&gt;# Install evaluator task to run at midnight  daily&lt;br /&gt;#&lt;br /&gt;dbaccess -e&amp;nbsp;$dbs -  &amp;lt;&lt;eof drop="" evaluate_&lt;span="" procedure=""&gt;${dbs}_stats&lt;/eof&gt;&lt;/span&gt;;&lt;br /&gt;create procedure evaluate_${dbs}_stats();&lt;br /&gt;define cmd  char(200);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;let cmd =  '/home/informix/ADTC/bin/&lt;wbr&gt;&lt;/wbr&gt;evaluate_stats.ksh  $dbs&amp;nbsp;&amp;amp;';&lt;br /&gt;system cmd;&lt;br /&gt;end procedure;&lt;br /&gt;database  sysadmin;&lt;br /&gt;delete from ph_task where tk_name =  'dostats_evaluator_task';&lt;br /&gt;INSERT INTO ph_task(  tk_id,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tk_name, tk_type, tk_group,  tk_description, tk_execute,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tk_start_time, tk_stop_time,  tk_frequency, tk_Sunday, tk_Monday,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tk_Tuesday,  tk_Wednesday, tk_Thursday, tk_Friday, tk_Saturday ) VALUES&lt;br /&gt;( 0,  'dostats_evaluator_${dbs}_task&lt;wbr&gt;&lt;/wbr&gt;', 'TASK',  'DOSTATS', 'dostats run for evaluate_${dbs}_stats',&lt;br /&gt;'EXECUTE PROCEDURE  $dbs:evaluate_${dbs}_&lt;wbr&gt;&lt;/wbr&gt;stats();', $estart_time, '10:00:05', ' 1 00:00:00', 't', 't', 't', 't', 't', 't','t'  );&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;EOF&lt;br /&gt;}&amp;nbsp; | tee $logdir/setup_&lt;wbr&gt;&lt;/wbr&gt;stats.$dbs.$(date +%Y.%m.%d.%H.%M.%S).out&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;echo "Report also written to: $logdir/setup_stats.$dbs.$(date  +%Y.%m.%d.%H.%M.%S).out"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;==============================&lt;wbr&gt;&lt;/wbr&gt;==============================&lt;wbr&gt;&lt;/wbr&gt;====================&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;#! /user/bin/ksh&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;######&lt;br /&gt;#  initial_stats.ksh - unconditionally generate a full set of  data&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; distributions for the&amp;nbsp;named database.&lt;br /&gt;#&lt;br /&gt;# Written by: Art S.  Kagel, Advanced DataTools  Corp.&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;######&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;dbs=$1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;logdir=$2 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# Environment "dot" script &lt;/div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;. ~informix/ADTC/aliases.art&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dostats -d&amp;nbsp;$dbs -E -Q 100 -w 10 -n 100 --aus-thresholds --time-display  --drop-distributions --isolation d -m&amp;nbsp; 2&amp;gt;&amp;amp;1&lt;br /&gt;}&amp;nbsp; | tee $logdir/&lt;wbr&gt;&lt;/wbr&gt;initial_stats.$dbs.$(date  +%Y.%m.%d.%H.%M.%S).out&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;echo "Report also written to: $logdir/&lt;wbr&gt;&lt;/wbr&gt;initial_stats.$dbs.$(date  +%Y.%m.%d.%H.%M.%S).out"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;==============================&lt;wbr&gt;&lt;/wbr&gt;==============================&lt;wbr&gt;&lt;/wbr&gt;================&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;#! /user/bin/ksh&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;######&lt;br /&gt;#  evaluate_stats.ksh - Install a procedure to generate updated  data&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; distributions for the&amp;nbsp;named database.&lt;br /&gt;#&lt;br /&gt;# Written by: Art S.  Kagel, Advanced DataTools  Corp.&lt;br /&gt;#&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;##############################&lt;wbr&gt;&lt;/wbr&gt;######&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;dbs=$1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;logdir=$2 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;# Environment "dot" script &lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;. ~informix/ADTC/aliases.art&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dostats -d $dbs -Q  100 -w 10 --isolation d -m --procedure dostats_refresh_$dbs&amp;nbsp;  2&amp;gt;&amp;amp;1&lt;br /&gt;}&amp;nbsp; | tee $logdir/&lt;wbr&gt;&lt;/wbr&gt;evaluate_stats.$dbs.$(date  +%Y.%m.%d.%H.%M.%S).out&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-6235492960928765145?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/6235492960928765145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2011/05/aus-versus-dostats.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/6235492960928765145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/6235492960928765145'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2011/05/aus-versus-dostats.html' title='AUS -versus- dostats'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-8585876583486711769</id><published>2010-10-26T09:46:00.000-04:00</published><updated>2010-10-26T09:46:53.904-04:00</updated><title type='text'>My next new feature request</title><content type='html'>I've thought of my next feature request.&amp;nbsp; Speaking with other users, especially those in high volume near 24x7 environments, I often hear the lament that after a server restart it can take many minutes and often hours before the server reaches its normal steady state with active rows in the cache and all data dictionary entries, data distributions, stored procedures, common statements, and other cached objects loaded up.&amp;nbsp; During this ramp-up period performance is significantly reduced since most queries require a physical IO to read in the pages that are needed and possibly fill in other cache entries.&lt;br /&gt;&lt;br /&gt;Based on this lament, my feature request is that in the background, after every checkpoint, the engine dumps out the list of cached data and index page addresses so that during a restart the engine can - optionally - read in the list and repopulate the cache.&amp;nbsp; If this goes through the normal page processing algorithms I expect that the data dictionary and distribution caches can be filled in as well.&amp;nbsp; The statements cache and stored procedure caches may have to be handled separately, though the procedure cache should be simple enough if the procnames are saved along with the page addresses at checkpoint time.&amp;nbsp; The statement cache may be the costly one since the entire statement texts will have to be saved and restored to memory, but this is also doable.&amp;nbsp; At least from an outsider's point of view.&lt;br /&gt;&lt;br /&gt;I ran this by some of the Informix development team last night here at IOD and no one thought that this one was difficult to pull off.&amp;nbsp; The only thing we lack is a strong user case.&amp;nbsp; What do YOU think?&amp;nbsp; Is this a useful feature?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-8585876583486711769?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/8585876583486711769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2010/10/my-next-new-feature-request.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/8585876583486711769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/8585876583486711769'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2010/10/my-next-new-feature-request.html' title='My next new feature request'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-3030558384030869842</id><published>2010-10-18T22:54:00.001-04:00</published><updated>2010-10-21T16:56:53.654-04:00</updated><title type='text'>Fear the Panther</title><content type='html'>So, after much waiting and absolutely no pre-event hoopla, Panther is finally here.&amp;nbsp; You will see much in the press and in the IBM official announcements about the features of Panther (Informix Dynamic Server version 11.70) that IBM thinks are important to the market place. Jerry Keesee is calling Panther "The Last of the Big Cats" hinting that IBM will be finding another theme for the next release.&lt;br /&gt;&lt;br /&gt;I don't want to repeat all of what you will hear from IBM, but I do want to provide my own announcement of those features that I feel will be the most important in the market place over the next 12 months.&amp;nbsp; This is a tremendous release as far as features are concerned.&amp;nbsp; Without further ado, here's my list, categorized as IBM has done theirs:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;OLTP Data Security&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;What do I mean by OLTP Data Security?&amp;nbsp; Well, what is the greatest fear in an OLTP environment?&amp;nbsp; To me it is loss of transactional data.&amp;nbsp; If a user has completed a transaction and thinks it is secured in your database, you cannot afford to lose it.&amp;nbsp; If that transaction was a $20 ATM withdrawal, your company is on the hook for the money.&amp;nbsp; If it was a multi-million dollar electronic funds transfer, even more so.&lt;br /&gt;&lt;br /&gt;If a user is in the midst of a transaction and your primary server crashes, do you tell the users "Sorry.&amp;nbsp; System problem.&amp;nbsp; Please try again later."&amp;nbsp; You will lose a customer, or several hundred customers.&lt;br /&gt;&lt;br /&gt;"OK.", you ask, "How can Panther help?"&amp;nbsp; Panther has a new feature that IBM is calling "transaction survival".&amp;nbsp; I call it "uninterruptible transactions".&amp;nbsp; If your primary MACH11 server goes down any transactions begun by a user connected to any secondary server (HDR, SDS, or RSS) will not be lost but will be picked up by the surviving SDS secondary server which is promoted to be the new primary server and the transaction will continue unharmed.&amp;nbsp; There is no application change or ONCONFIG parameter needed to enable this feature and make it work.&amp;nbsp; Your existing applications don't have to be modified to reconnect to the new primary server.&amp;nbsp; This is all automatic and effort-free.&amp;nbsp; No other RDBMS server in the industry has this feature.&amp;nbsp; Oracle does have a similar feature but it's not real and it's not automatic.&amp;nbsp; You have to enable it in your application because it is actually implemented in the front-end libraries which fake survival by recording the transaction locally on the client in a flat file and replay the transaction from scratch after reconnecting to the new server.&amp;nbsp; The feature is so lame that Oracle doesn't even talk about it.&lt;br /&gt;&lt;br /&gt;To me transaction survival is a biggie!&amp;nbsp; The biggest feature in Panther.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;OLTP Performance&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;First, ADTC's testing shows that Panther is about 11% faster than 11.50xC7 without taking advantage of any of the performance enhancing features mentioned below.&amp;nbsp; However, Panther has several features to further improve performance of OLTP systems.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;One is the removal of the requirement for a foreign key constraint to have an index on the foreign key.&amp;nbsp; The supporting index can now be optionally disabled at constraint create time (or later) and its storage will be released.&amp;nbsp; The selectivity of these indexes on the foreign keys pointing to lookup tables with few rows is low and the utility of requiring the index has always been questionable.&amp;nbsp; The engine does not need these indexes to enforce the constraints unless cascading deletes are enabled.&amp;nbsp; You likely don't need them for searching because most systems have composite keys containing those foreign key columns that are used for searching and filtering.&amp;nbsp; It is rare in an OLTP style query for the lookup tables to be selected as the primary query tables requiring an index on the dependent table to support the join.&amp;nbsp; Removing this requirement will reduce the overhead of inserting and modifying data in tables with many code columns without having any impact on query performance.&lt;br /&gt;&lt;br /&gt;Another one is the new Forest of Trees indexes.&amp;nbsp; This is a new indexing method that combines many of the advantages of a Hash index with those of a traditional Informix B+tree index.&amp;nbsp; For indexes on keys who's first column(s) have low selectivity but are still important to the correct processing of many OLTP queries (think geo, country, region of an index supporting a company's geographic reporting structure as an example) the b+tree indexes can become rather deep with relatively few unique elements on a level.&amp;nbsp; What Forest of Trees indexes do is to let the Database Architect specify one or more of the leading columns to be used to create a hash key.&amp;nbsp; Then a separate b+tree is created for each hash value containing only the  remaining key parts following the hash columns.&amp;nbsp; This results in several flatter b+tree indexes.&amp;nbsp; You can't perform range scans on the hash columns (for that you will also need a pure b+tree index) but you can do so on the remaining columns in the index key.&lt;br /&gt;&lt;br /&gt;Multiple index scans in the optimizer is another big win for OLTP.&amp;nbsp; Often you have a complex join between three or four tables using the filtered rows from the independent tables to act as filters on the dependent table and several filters on multiple columns in the dependent table.&amp;nbsp; The optimizer in earlier releases of IDS had to select the "best index" often resulting the engine having to read many rows of data and perform the final filters using the actual row data even though indexes on the filter columns are available.&amp;nbsp; The old XPS optimizer could use more than one index on each table in a query.&amp;nbsp; Now Panther can as well.&amp;nbsp; This can reduce the number of long key compound indexes which can also improve insert, delete, and update performance.&amp;nbsp; For databases that are delivered as part of a third party application where you can't control the schema, this one may be a HUGE win since the composite indexes that could make such queries reasonably efficient may never have existed in the first place.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Data Warehouse Performance&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;New Star Schema&amp;nbsp; support in the optimizer.&amp;nbsp; What does this one mean?&amp;nbsp; This is another offshoot of XPS and the multi-index support above.&amp;nbsp; In Panther, when you have many dimension tables, you can create a single compound index on all of the dimension table keys in the fact table.&amp;nbsp; The optimizer will realize this and use the filters on the dimension tables to generate a list of valid combinations of the dimension tables' keys into a temp table and join that temp table to the fact table using the compound index to quickly locate the rows that satisfy the criteria on the dimension tables.&amp;nbsp; Whoosh!&amp;nbsp; At ADTC we've tested this one quite a bit and the results are impressive.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Administration &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I put the new Heterogeneous Server Grid feature under this heading because I can't think of a better one.&amp;nbsp; IBM is actually making quite a bit of noise about this one and rightfully so.&amp;nbsp; If you have lots of old hardware around, don't throw it out.&amp;nbsp; Don't sell it to a junker or to a used equipment reseller.&amp;nbsp; Configure it as an IDS grid node and add to your company server farm's net computing power at near zero cost (since the boxes are already paid for and amortized).&amp;nbsp; I'm waiting for confirmation about whether this means you can have an HDR or other MACH11 secondary that's build from different hardware or different OS.&amp;nbsp; Is suspect not, but who knows what the future may bring.&amp;nbsp; Heterogeneous grid was a big request from a number of very large Informix customers, so if Heterogeneous MACH11 members are what you need, speak up.&lt;br /&gt;&lt;br /&gt;Zero downtime rolling upgrades.&amp;nbsp; Speaks for itself.&amp;nbsp; Jarrod down in New Zealand is jumping for joy over this one I'm sure.&amp;nbsp; He and his one assistant have to upgrade a very large number of servers during the few weeks a year that his company's servers can afford to be offline even for a few hours.&amp;nbsp; Being able to configure their server grid to be able to do this anytime to roll in a fixpack that removes a critical bug will be a god send for him and many of us out there.&lt;br /&gt;&lt;br /&gt;The IIUG will soon be posting its new Features Survey which we will then hand to IBM to help them design the next release of Informix Dynamic Server.&amp;nbsp; If you don't think that you have a voice in how IBM determines features for Informix, think again.&amp;nbsp; Every one of the features mentioned here was requested by users like you/me/us either directly or through an expressed need that had to be filled.&amp;nbsp; Several are features that were asked for and received high marks on the previous Features Surveys.&amp;nbsp; So, when you see the Insider or email announcement of the Survey, fill it out.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the next release I'd like to see:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Transaction survival when the server your session is connected to crashes!&lt;/li&gt;&lt;li&gt;Bitmap indexes with multiple bitmaps used to generate a net bitmap of satisfying rows.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;What would you like to see?&amp;nbsp; Comments welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-3030558384030869842?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/3030558384030869842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2010/10/fear-panther.html#comment-form' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/3030558384030869842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/3030558384030869842'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2010/10/fear-panther.html' title='Fear the Panther'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-6120902488798052402</id><published>2010-07-28T09:10:00.001-04:00</published><updated>2010-11-11T00:06:44.208-05:00</updated><title type='text'>New Journaled Filesystem Rant</title><content type='html'>There have been questions from multiple posters on the Informix Forums lately asking about Journaled File Systems (JFSes) like EXT3, EXT4, and ZFS among others.&amp;nbsp; Bottom line?&amp;nbsp; JFSes should NEVER be used for storing data for a database system.&amp;nbsp; ANY database system, whether it is Berkley DB, Oracle, Sybase, DB2, MySQL, PostGreSQL, MS SQL Server, Informix, whatever.&amp;nbsp; "But", you protest, "the journaling makes the filesystem safer.&amp;nbsp; It speeds recovery.&amp;nbsp; It is 'good thing'!"&amp;nbsp; No.&amp;nbsp; Not for databases.&amp;nbsp; Flat out - no!&lt;br /&gt;&lt;br /&gt;First, your database is already performing its own logging (read journaling for the DB neophite).&amp;nbsp; That is sufficient to permit proper and secure recovery.&amp;nbsp; It is also fast - if it weren't the database product would have gone the way of DBase2 and DBase3 long ago.&amp;nbsp; The filesystem's journal is redundant at best and at worst will actually slow recovery (versus using RAW or COOKED - non-filesystem - space for storage) by requiring two sets of recovery operations to happen sequentially.&amp;nbsp; Note that all properly designed database systems use O_SYNC or O_DIRECT mode write operations to ensure that their data is safely on disk.&amp;nbsp; However, it has come to my attention that many journaling filesystems do not obey these directives when it comes to metadata changes.&amp;nbsp; On these filesystems metadata is ALWAYS cached.&amp;nbsp; Therefore there is neither a safety nor recovery speed gain from using JSFes for database storage.&lt;br /&gt;&lt;br /&gt;Most JFSes use metadata only journaling.&amp;nbsp; Here is some insight into that process, and why JFSes should not be used for database storage:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This (logical metadata only journaling) is the method used by EXT3, EXT4, JFS2, and ZFS&lt;/li&gt;&lt;li&gt;All of these except AIX's JSFS2&amp;nbsp; use block relocation instead of physical block journaling (AIX's JFS2 - and the Open Source JFS filesystem derived from it - does not journal or relocate data blocks so it is safe).&amp;nbsp; This  means that on write a block is always written to a new location rather  than overwriting the existing block on disk.&amp;nbsp; A properly designed JFS will commit the new version of the disk block  before updating the metadata or the logical journal (that's the problem  with EXT4 - and EXT3 with write-back enabled - they write the metadata  first, then the journal entry before actually committing the physical  change to disk).&amp;nbsp; Once the write and journal are completed the FS  metadata is updated and the write is acknowledged.&amp;nbsp; This means that, in a proper JFS, on a crash there are three  possibilities:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The new block version was partially or completely written but the journal entry was not written.&lt;/li&gt;&lt;li&gt;The new block version and journal entry were written and committed.&lt;/li&gt;&lt;li&gt;The new block version, journal, and metadata were written and committed.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div style="margin-left: 40px;"&gt;In the first case, after  recovery, the file remains unchanged, however the changes are lost.&amp;nbsp; In the second case, after  recovery, the FS makes the missed metadata entries and the file is  modified during recovery and the original block version is freed for  reuse.&amp;nbsp; In the third case all was well before the crash and the original  version of the block was released for reuse.&amp;nbsp;&lt;br /&gt;&lt;/div&gt;The problem with EXT4 (and EXT3 with write-back enabled) is  that the application (meaning in this case Informix or other database system) thinks everything  is hunky dory since the FS acknowledged the change as committed.&amp;nbsp;  However, immediately after the acknowledgment the physically modified  block is still ONLY in cache and only the metadata and journal entry  have been saved to disk.&amp;nbsp; At this point if there is a crash, the file is  actually unrecoverable!&amp;nbsp; The metadata and the journal entry say the  block has been moved to a new location and rewritten, but the new  location has garbage in it from some previous block.&amp;nbsp; This one made  Linus Torvalds absolutely livid and he tore the EXT4 designers a new one  over the design.&amp;nbsp; You can GOOGLE his rants on the subject yourself.&amp;nbsp; Last I heard you could not disable the write-back  behavior of EXT4 - Linus was pushing to have that fixed, but I don't  know if it ever was.&amp;nbsp; I use EXT3 default mode for filesystems and EXT2 (the original non-journaled Linux FS) for database storage that I care about.&lt;br /&gt;&lt;br /&gt;JFS2 and the Open Source JFS filesystem have no serious problems.&amp;nbsp; EXT3 in default mode and ZFS at least are safe, but the problem with  them is just the fact of the block relocations.&amp;nbsp; There is the  performance problem of rewriting a whole block every time the database  changes a single page within the block and so negating much of the gains  of caching and there is the bigger problem that the file is no longer  even as contiguous as a non-journaled filesystem would have it be.&amp;nbsp;  Standard UNIX filesystems (EXT2 and UFS as examples) allocate blocks of contiguous space and try to  leave free space that is contiguous with those allocated blocks unused  when allocating space for other files so that as a file grows it remains  mostly contiguous in multi-block chunks.&amp;nbsp; This fragments the free space  in an FS making it difficult to write very large files (like Informix  chunks) that are contiguous, but if you keep the chunks on an FS that's  dedicated to Informix chunks that has not been a real problem up until recently since Informix did not extend existing chunks over  time prior to the recent release of Informix v 11.70.&amp;nbsp; Informix 11.70 can, optionally, extend the size of an existing chunk.&amp;nbsp; JFS's break that rule keeping the level of contiguous bits of a file the  same as the block level.&amp;nbsp; Even if a chunk were allocated as contiguous  initially, over time the JFS will cause the file to become internally fragmented.&amp;nbsp;  A two logically contiguous blocks that were originally also physically contiguous can become spread out within the file's allocated space over time when they are rewritten.&amp;nbsp; If you make the FS block size smaller to alleviate the costs of multiple  block rewrites, you make the file fragmentation worse.&lt;br /&gt;&lt;br /&gt;These problems don't affect filesystems and normal files as much as  databases because the nature of the IO to files is different than IO to  databases.&amp;nbsp; When you write to a flat file, you write mostly  sequentially, you rarely rewrite a portion of the file (unless you  rewrite the entire file) and you never sync the file to disk before you  close the file.&amp;nbsp; That means that the cache will coalesce all writes  until an entire block has been written out before the FS and OS cause a  flush and sync of the cache to disk.&amp;nbsp; That means that the FS has the  ability to try to keep the rewritten blocks contiguous by allocating the  replacement blocks contiguously.&amp;nbsp; Essentially the file is relocated  whole if it is rewritten.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Databases don't work that way.&amp;nbsp; Informix, for example, writes every block to a  COOKED device or filesystem chunk either under O_SYNC or O_DIRECT control both of  which force the single write operation (and Informix only ever writes a single  page or eight contiguous pages at a time) to be physically written and  committed before the write() call returns.&amp;nbsp; That means that the  coalescing features of the FS and OS cache management are bypassed in  favor of data safety.&amp;nbsp; So, if the engine performs what it  thinks is a sequential scan, it is actually performing a random read of  the file swinging the read/write heads back and forth across the disk.&amp;nbsp;  If the physical structure is shared with other applications and even other machines (can you say  massive SAN?) that will also be competing with those other storage clients  for head positioning.&amp;nbsp; In normal sequential scanning (ie RAW or COOKED  device or non-JFS files) the disk, controller, filesystem, and database read ahead processing reduces the performance impact  of this head contention somewhat.&amp;nbsp; In a JFS that uses block relocation read ahead cannot help at all.&lt;br /&gt;&lt;br /&gt;All of this having been said, I  guess I have to change my mantra:&lt;br /&gt;&lt;br /&gt;NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO  JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS,  NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO  RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO  RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO  RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO  RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO  RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO  RAID5!!!&amp;nbsp;&amp;nbsp; NO JFS, NO RAID5!!!&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Oh!&amp;nbsp; Also, PLEASE:&amp;nbsp; NO RAID6!!!!!!!!!!!&amp;nbsp; Yuck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-6120902488798052402?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/6120902488798052402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2010/07/new-journaled-filesystem-rant.html#comment-form' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/6120902488798052402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/6120902488798052402'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2010/07/new-journaled-filesystem-rant.html' title='New Journaled Filesystem Rant'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-2227665561815593862</id><published>2010-06-16T15:13:00.000-04:00</published><updated>2010-06-16T15:13:45.724-04:00</updated><title type='text'>RAID5 Rant</title><content type='html'>I used to post to the Informix NewsGroup about once a year.&amp;nbsp; I haven't done so in a long time, and now I have a different forum to do that in.&amp;nbsp; This BLOG.&amp;nbsp; So, for all of your reading pleasure here is my analysis of why RAID5 is Unsafe at Any Speed:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;RAID5 versus RAID10 (or even RAID3 or RAID4)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What is RAID5?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;OK here is the deal, RAID5 uses ONLY ONE parity drive per stripe and many&lt;br /&gt;RAID5 arrays are 5 (if your counts are different adjust the calculations &lt;br /&gt;appropriately) drives (4 data and 1 parity though it is not a single&lt;br /&gt;drive that is holding all of the parity as in RAID 3 &amp;amp; 4 but read on). If&lt;br /&gt;you have 10 drives or say 20GB each for 200GB RAID5 will use 20% for&lt;br /&gt;parity so you will have 160GB of storage.&amp;nbsp; Now since RAID10, like&lt;br /&gt;mirroring (RAID1), uses 1 (or more) mirror drive for each primary drive &lt;br /&gt;you areusing 50% for redundancy so to get the same 160GB of storage you &lt;br /&gt;will need 8 pairs or 16 - 20GB drives, which is why RAID5 is so popular.&amp;nbsp; &lt;br /&gt;This intro is just to put things into perspective.&lt;br /&gt;&lt;br /&gt;RAID5 is physically a stripe set like RAID0 but with data recovery&lt;br /&gt;included.&amp;nbsp; RAID5 reserves one disk block out of each stripe block for&lt;br /&gt;parity data.&amp;nbsp; The parity block contains an error correction code which can&lt;br /&gt;correct any error in the RAID5 block, in effect it is used in combination&lt;br /&gt;with the remaining data blocks to recreate any single missing block, gone&lt;br /&gt;missing because a drive has failed.&amp;nbsp; The innovation of RAID5 over RAID3 &amp;amp;&lt;br /&gt;RAID4 is that the parity is distributed on a round robin basis so that&lt;br /&gt;there can be independent reading of different blocks from the several&lt;br /&gt;drives.&amp;nbsp; This is why RAID5 became more popular than RAID3 &amp;amp; RAID4 which &lt;br /&gt;must sychronously read the same block from all drives together.&amp;nbsp; So, if&lt;br /&gt;Drive2 fails blocks 1,2,4,5,6 &amp;amp;7 are data blocks on this drive and blocks&lt;br /&gt;3 and 8 are parity blocks on this drive.&amp;nbsp; So that means that the parity on&lt;br /&gt;Drive5 will be used to recreate the data block from Disk2 if block 1 is&lt;br /&gt;requested before a new drive replaces Drive2 or during the rebuilding of&lt;br /&gt;the new Drive2 replacement.&amp;nbsp; Likewise the parity on Drive1 will be used to&lt;br /&gt;repair block 2 and the parity on Drive3 will repair block4, etc.&amp;nbsp; For&lt;br /&gt;block 2 all the data is safely on the remaining drives but during the&lt;br /&gt;rebuilding of Drive2's replacement a new parity block will be calculated&lt;br /&gt;from the block 2 data and will be written to Drive 2.&lt;br /&gt;&lt;br /&gt;Now when a disk block is read from the array the RAID software/firmware&lt;br /&gt;calculates which RAID block contains the disk block, which drive the disk&lt;br /&gt;block is on and which drive contains the parity block for that RAID block&lt;br /&gt;and reads ONLY the data drive.&amp;nbsp; It returns the data block . If you later&lt;br /&gt;modify the data block it recalculates the parity by subtracting the old&lt;br /&gt;block and adding in the new version then in two separate operations it&lt;br /&gt;writes the data block followed by the new parity block.&amp;nbsp; To do this it&lt;br /&gt;must first read the parity block from whichever drive contains the parity&lt;br /&gt;for that stripe block and reread the unmodified data for the updated block&lt;br /&gt;from the original drive. This read-read-write-write is known as the RAID5&lt;br /&gt;write penalty since these two writes are sequential and synchronous the&lt;br /&gt;write system call cannot return until the reread and both writes complete,&lt;br /&gt;for safety, so writing to RAID5 is up to 50% slower than RAID0 for an&lt;br /&gt;array of the same capacity.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Now what is RAID10:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;RAID10 is one of the combinations of RAID1 (mirroring) and RAID0&lt;br /&gt;(striping) which are possible.&amp;nbsp; There used to be confusion about what &lt;br /&gt;RAID01 or RAID01 meant and different RAID vendors defined them differently. &lt;br /&gt;Several years ago I proposed the following standard language which &lt;br /&gt;seems to have taken hold.&amp;nbsp; When N mirrored pairs are striped together&lt;br /&gt;this is called RAID10 because the mirroring (RAID1) is applied before &lt;br /&gt;striping (RAID0).&amp;nbsp; The other option is to create two stripe sets and mirror &lt;br /&gt;them one to the other, this is known as RAID01 (because the RAID0 is applied &lt;br /&gt;first).&amp;nbsp; In either a RAID01 or RAID10 system each and every disk block is &lt;br /&gt;completely duplicated on its drive's mirror.&amp;nbsp; Performance-wise both RAID01 &lt;br /&gt;and RAID10 are functionally equivalent.&amp;nbsp; The difference comes in during &lt;br /&gt;recovery where RAID01 suffers from some of the same problems I will describe &lt;br /&gt;affecting RAID5 while RAID10 does not.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;OK, so what?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now if a drive in the RAID5 array dies, is removed, or is shut off data is&lt;br /&gt;returned by reading the blocks from the remaining drives and calculating&lt;br /&gt;the missing data using the parity, assuming the defunct drive is not the&lt;br /&gt;parity block drive for that RAID block.&amp;nbsp; Note that it takes 4 physical&lt;br /&gt;reads to replace the missing disk block (for a 5 drive array) for four out&lt;br /&gt;of every five disk blocks leading to a 64% performance degradation until the &lt;br /&gt;problem is discovered and a new drive can be mapped in to begin recovery.&lt;br /&gt;&lt;br /&gt;If a drive in the RAID10 array dies data is returned from its mirror drive&lt;br /&gt;in a single read with only minor (6.25% on average) performance reduction &lt;br /&gt;when two non-contiguous blocks are needed from the damaged pair and none &lt;br /&gt;otherwise.&lt;br /&gt;&lt;br /&gt;One begins to get an inkling of what is going on and why I dislike RAID5, &lt;br /&gt;but, as they say on late night info-mercials, wait, there's more.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What's wrong besides a bit of performance I don't know I'm missing?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;OK, so that brings us to the final question of the day which is: What is&lt;br /&gt;the problem with RAID5?&amp;nbsp; It does recover a failed drive right?&amp;nbsp; So writes&lt;br /&gt;are slower, I don't do enough writing to worry about it and the cache&lt;br /&gt;helps a lot also, I've got LOTS of cache!&amp;nbsp; The problem is that despite the&lt;br /&gt;improved reliability of modern drives and the improved error correction&lt;br /&gt;codes on most drives, and even despite the additional 8 bytes of error&lt;br /&gt;correction that EMC puts on every Clariion drive disk block (if you are &lt;br /&gt;lucky enough to use EMC systems), it is more than a little possible that &lt;br /&gt;a drive will become flaky and begin to return garbage.&amp;nbsp; This is known as &lt;br /&gt;partial media failure.&amp;nbsp; Now SCSI controllers reserve several hundred disk &lt;br /&gt;blocks to be remapped to replace fading sectors with unused ones, but if &lt;br /&gt;the drive is going these will not last very long and will run out and SCSI &lt;br /&gt;does NOT report correctable errors back to the OS!&amp;nbsp; Therefore you will not &lt;br /&gt;know the drive is becoming unstable until it is too late and there are no &lt;br /&gt;more replacement sectors and the drive begins to return garbage.&amp;nbsp; [Note &lt;br /&gt;that the recently popular ATA drives do not (TMK) include bad sector &lt;br /&gt;remapping in their hardware so garbage is returned that much sooner.]&amp;nbsp; &lt;br /&gt;When a drive returns garbage, since RAID5 does not EVER check parity on &lt;br /&gt;read (RAID3 &amp;amp; RAID4 do BTW and both perform better for databases than &lt;br /&gt;RAID5 to boot) when you write the garbage sector back garbage parity will &lt;br /&gt;be calculated and your RAID5 integrity is lost!&amp;nbsp; Similarly if a drive &lt;br /&gt;fails and one of the remaining drives is flaky the replacement will be &lt;br /&gt;rebuilt with garbage also.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Need more?&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;During recovery, read performance for a RAID5 array is degraded by&lt;br /&gt;as much as 80%.&amp;nbsp; Some advanced arrays let you configure the preference&lt;br /&gt;more toward recovery or toward performance.&amp;nbsp; However, doing so will&lt;br /&gt;increase recovery time and increase the likelihood of losing a second&lt;br /&gt;drive in the array before recovery completes resulting in catastrophic&lt;br /&gt;data loss.&amp;nbsp; RAID10 on the other hand will only be recovering one drive out&lt;br /&gt;of 4 or more pairs with performance ONLY of reads from the recovering pair&lt;br /&gt;degraded making the performance hit to the array overall only about 20%!&lt;br /&gt;Plus there is no parity calculation time used during recovery - it's a&lt;br /&gt;straight data copy.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What about that thing about losing a second drive?&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Well with RAID10 there is no danger unless the one mirror that is recovering&lt;br /&gt;also fails and that's 80% or more less likely than that any other drive in a RAID5&lt;br /&gt;array will fail!&amp;nbsp; And since most multiple drive failures are caused by&lt;br /&gt;undetected manufacturing defects you can make even this possibility&lt;br /&gt;vanishingly small by making sure to mirror every drive with one from a&lt;br /&gt;different manufacturer's lot number.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;"Oh!", I can hear you say, "This schenario does not seem likely!"&amp;nbsp; &lt;br /&gt;Unfortunately it is all too likely.&amp;nbsp; It happened to me and I have heard &lt;br /&gt;from several other DBAs and SAs who have similar experiences.&amp;nbsp; My former &lt;br /&gt;employer lost 50 drives over two weeks when a batch of 200 IBM OEM drives &lt;br /&gt;began to fail.&amp;nbsp; IBM discovered that that single lot of drives would have &lt;br /&gt;their spindle bearings freeze after so many hours of operation.&amp;nbsp; Fortunately &lt;br /&gt;due in part to RAID10 and in part to a herculean effort by DG techs and our &lt;br /&gt;own people over 2 weeks no data was lost. HOWEVER, one RAID5 filesystem was &lt;br /&gt;a total loss after a second drive failed during recover.&amp;nbsp; Fortunately &lt;br /&gt;everything was on tape and the restore succeeded.&amp;nbsp; However, that filesystem &lt;br /&gt;was down for several hours causing 1500 developers to twiddle their thumbs &lt;br /&gt;for most of a day.&amp;nbsp; That one internal service outage of only a few hours &lt;br /&gt;cost more in lost productivity than the extra cost of using RAID10 for all &lt;br /&gt;of those filesystem arrays!&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Conclusion?&amp;nbsp; For safety and performance favor RAID10 first, RAID3 second,&lt;br /&gt;RAID4 third, and RAID5 last!&amp;nbsp; The original reason for the RAID2-5 specs&lt;br /&gt;was that the high cost of disks was making RAID1, mirroring, impractical.&lt;br /&gt;That is no longer the case!&amp;nbsp; Drives are commodity priced, even the biggest&lt;br /&gt;fastest drives are cheaper in absolute dollars than drives were then and&lt;br /&gt;cost per MB is a tiny fraction of what it was.&amp;nbsp; Does RAID5 make ANY sense&lt;br /&gt;anymore?&amp;nbsp; Obviously I think not.&lt;br /&gt;&lt;br /&gt;To put things into perspective:&amp;nbsp; If a drive costs $1000US (and most are &lt;br /&gt;far less expensive than that) then switching &lt;br /&gt;from a 4 pair RAID10 array to a 5 drive RAID5 array will save 3 drives or&lt;br /&gt;$3000US.&amp;nbsp; What is the cost of overtime, wear and tear on the technicians,&lt;br /&gt;DBAs, managers, and customers of even a recovery scare?&amp;nbsp; What is the cost&lt;br /&gt;of reduced performance and possibly reduced customer satisfaction? Finally&lt;br /&gt;what is the cost of lost business if data is unrecoverable?&amp;nbsp; I maintain&lt;br /&gt;that the drives are FAR cheaper!&amp;nbsp; Hence my mantra:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;NO RAID5!&amp;nbsp; NO RAID5!&amp;nbsp; NO RAID5!&amp;nbsp; NO RAID5!&amp;nbsp; NO RAID5!&amp;nbsp; NO RAID5!&amp;nbsp; NO RAID5!&amp;nbsp; &lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;NO RAID5!&amp;nbsp; NO RAID5!&amp;nbsp; NO RAID5! &lt;/b&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-2227665561815593862?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/2227665561815593862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2010/06/raid5-rant.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/2227665561815593862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/2227665561815593862'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2010/06/raid5-rant.html' title='RAID5 Rant'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-27945510349180435</id><published>2010-05-02T13:24:00.000-04:00</published><updated>2010-05-02T13:24:15.475-04:00</updated><title type='text'>Selling Informix</title><content type='html'>OK, I'm a tech weinie.&amp;nbsp; A nerd.&amp;nbsp; A geek.&amp;nbsp; But it wasn't always so.&amp;nbsp; I grew up working with my family in retail hobbies and sporting goods and I started my undergraduate career as a Mathematics major.&amp;nbsp; After a break of a couple of years - caused by a night of never-to-be repeated seizures and a month of heavy duty downers before I could get an appointment with a Neurologist who could tell me I didn't need to take them - I finished up with a degree in Management and Marketing.&amp;nbsp; I also spent a couple of years in sales following that before deciding that my first love was Programming which I first learned in High School.&lt;br /&gt;&lt;br /&gt;Why do I mention this?&amp;nbsp; As background to today's post.&amp;nbsp; I want to promote my own view of how IBM SHOULD be presenting their database portfolio to the world.&amp;nbsp; The personal history is here to indicate that I'm not JUST a tech weinie.&amp;nbsp; When it comes to sales and marketing I probably have as much training and experience as more than a few IBM sales and marketing weinies.&amp;nbsp; I have been promoting this idea to several members of the Informix user community and to any IBMer who will give me 5 minutes to badger them - and that includes Rob, Arvind, Jerry, Gary P., Cindy F., and others.&amp;nbsp; I prepared a Powerpoint slide for Rob Thomas outlining my ideas when he met with the IIUG BOD this winter (and BTW, one reason that I am, as IB I said in my first post, cautiously optimistic about IBM's new attitude is the effort that Rob made to drive all the way up directly from the airport in Philadephia in the aftermath of a snow storm after flying many hours back from South America and before even going home to his family).&amp;nbsp; I also displayed it on the big screens at the Conference for two hours or so on Wednesday.&amp;nbsp; I'll try to attach it as a JPEG here.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_Xtyozsl6He4/S92b2XsxGKI/AAAAAAAAAHQ/DyRycVMJcV0/s1600/Informix+Marketplace.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/_Xtyozsl6He4/S92b2XsxGKI/AAAAAAAAAHQ/DyRycVMJcV0/s640/Informix+Marketplace.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;So, what's the point?&amp;nbsp; IBM keeps saying that they have had trouble over the years, even, as they admit, when they have tried which they have not always done, positioning Informix Dynamic Server in the market place and especially against or alongside IBM DB2.&amp;nbsp; Note that I spelled out IDS because IBM - the quintessential purveyor of acronyms - has decided that outside of our community "IDS" has no meaning and we should just say "Informix" from now on.&amp;nbsp; I agree with the sentiment, but prefer to use the full product name rather than the brand name.&lt;br /&gt;&lt;br /&gt;What the presentation above shows is that IBM should not be trying to position Informix Dynamic Server and DB2 at all.&amp;nbsp; IBM has a thing to be envied throughout the database software community - a database server product line.&amp;nbsp; No one else has or can possibly dream of having such a complete package to present to customers.&amp;nbsp; Trying to say to a customer that one of these products (and I'm not excluding DB2 here) is the one database server that the customer should purchase is the wrong approach.&amp;nbsp; Trying to develop a strategy under which salespeople are scripted to present one server to customers using or considering Oracle and another to customers using or considering MS SQL Server is simply misguided thinking.&amp;nbsp; I like to explain this with an analogy taken from one of the bastions of Informix Dynamic Server use - The Home Depot.&lt;br /&gt;&lt;br /&gt;If you go into THD's Tool Hut looking for a hammer, do you expect to find a sales associate standing there who will look you over, evaluate your needs at a glance, and recommend the perfect hammer for your needs.&amp;nbsp; Will you have the sales associate running through a script in his or her head that says "If the customer is a woman recommend the light weight, inexpensive, wooden hammer with the smallish head.&amp;nbsp; If the customer is wearing overalls and a tank top recommend the kevlar and graphite fiber handled hammer with the titanium composite head." etc?&amp;nbsp; No! &lt;br /&gt;&lt;br /&gt;You will find a wall rack displaying THD's hammer product line.&amp;nbsp; Many hammers.&amp;nbsp; Wooden, metal, fiberglass, and graphite handles.&amp;nbsp; Small heads and medium heads and massive heads.&amp;nbsp; Claw hammers and ball peen hammers.&amp;nbsp; Hammers from a local forge and hammers from national brands.&amp;nbsp; When you look at that impressive and possibly confusing display, one of two things will happen.&amp;nbsp; Either you will look upon that vast collection and evaluate size, construction materials, weight, and price and pick one that you think meets your needs on your own, or, having stared starry eyed for several minutes, you will be approached by a sales associate who will say something on the order of&amp;nbsp; "Hi.&amp;nbsp; You look lost.&amp;nbsp; Looking for a hammer?"&amp;nbsp; "Yes", you will respond, "but there are so many to choose from...".&amp;nbsp; The associate will cheerily reply "No problem.&amp;nbsp; Somewhere up there is the perfect hammer for any particular job.&amp;nbsp; Tell me what you need it for and together we'll find the one best hammer or perhaps two hammers for you and the jobs you have."&amp;nbsp; Being retail hardware geeks and not sophisticated software salespeople, they won't be quite that eloquent, but you get the idea.&lt;br /&gt;&lt;br /&gt;IBM is trying to be that nonexistent hammer pusher.&amp;nbsp; Instead they need to be that THD sales associate.&amp;nbsp; If they do that, no other RDBMS vendor can compete.&amp;nbsp; Oracle might be able to come in and offer MySQL Enterprise, Oracle Database 11g, and Oracle with TimesTen. Sybase can offer embedded ISAM database and Sybase Adaptive Server Enterprise.&amp;nbsp; Microsoft can offer only Access and SQL Server.&amp;nbsp; There are HUGE gaps in those product lines.&lt;br /&gt;&lt;br /&gt;Only IBM can offer Informix Standard Engine, Informix Online 5.20, Informix Dynamic Server Workgroup Edition, Informix Dynamic Server, IBM DB2, and Informix Dynamic Server or IBM DB2 with the SolidDB Cache.&amp;nbsp; Unlike Oracle's "Editions" the five distinct products IBM has in its tool corral represent four distinct database engines with different characteristics and capabilities.&amp;nbsp; Standard Engine is the database that created Informix.&amp;nbsp; It started out as the embedded database engine delivered with the 4GL development language.&amp;nbsp; It was so good for real business database applications that it had to become a separate product. It is still a great database engine for smallish OLTP databases and while it does not scale to massive amounts of data (though it can certainly handle that physically) it does scale to large numbers of users and it is FAST for the simple queries these users require.&amp;nbsp; Great engine for students, startups and small businesses.&amp;nbsp; Great intro engine for VARs and ISVs.&lt;br /&gt;&lt;br /&gt;OnLine was the first RDBMS to permit taking an archive while the engine was actively being accessed and updated, hence Online.&amp;nbsp; This is still an ideal database engine for medium sized OLTP databases and still the same fast engine that put Informix on the map as a competitor to Oracle.&amp;nbsp; It scales to many users and to fairly large databases being able to handle up to about 200TB of data total and single tables up to 32GB.&lt;br /&gt;&lt;br /&gt;That brings us to the Informix Dynamic Server "Editions".&amp;nbsp; Workgroup Edition and Enterprise Edition are the same codebase but WE has throttles to limit the amount of resources you can access and some features are reserved for licensees of EE.&amp;nbsp; None of the competing databases (DB2 is NOT competition, it's part of the strategy - but the following holds for DB2 as well) can handle more data, process data faster, is more flexible, uses a little resources to get the job done, or requires as little maintenance and monitoring (as much as the latter is one of my own focuses) as Informix Dynamic Server.&amp;nbsp; For the medium sized business, for data marts, and for small data warehouses Informix Dynamic Server Workgroup Edition is ideal.&amp;nbsp; For massive OLTP databases and even medium sized data warehouses Informix Dynamic Server Enterprise Edition is unparalleled.&amp;nbsp; If you want to embed business logic into the engine itself there really is only one choice because only Informix Dynamic Server, of all of the players, can make that work efficiently and seamlessly.&lt;br /&gt;&lt;br /&gt;All of the Informix branded database servers are embeddable to an extent that others are not.&amp;nbsp; Sybase had to go back to the drawing board to develop that capability which has been purpose built into every Informix brand database server from the beginning.&lt;br /&gt;&lt;br /&gt;During the Q&amp;amp;A on Wednesday morning, Inhi Cho dismissed MySQL because "No business is putting MySQL into real production service." or something very close to that (I wasn't recording).&amp;nbsp; Those of us out in the field know that this is just not true, even for big business, as Gumby points out, MySQL is a real part of their data infrastructure strategy.&amp;nbsp; But for startups and small businesses it is becoming a strategic database server.&amp;nbsp; Now, I do agree with her other comment that "MySQL cannot scale to handle a business as it grows" from a startup to a serious enterprise.&amp;nbsp; However, neither Informix Dynamic Server nor IBM DB2 can fill that need in the critical years when a business is too small to pay for an Enterprise Class database server.&amp;nbsp; But IBM has products that can.&amp;nbsp; Also, let me state this emphatically and with no fear of being contradicted, any application written for Informix Standard Engine will run unmodified on OnLine or Dynamic Server and if it was compiled with a recent enough SDK without even recompiling! (OK, one exception is if the app embedded an SE style database name/path - and that should be fixed in future releases of SE in my opinion.)&amp;nbsp; Absolutely every application written to run on Informix OnLine will run unmodified against Dynamic Server without exception.&amp;nbsp; If it was compiled with an SDK released after 1994 it will even run without recompilation/relinking.&amp;nbsp; Forward compatibility has always been built into Informix branded database servers and their SDKs.&amp;nbsp; How's that for an upgrade path!&lt;br /&gt;&lt;br /&gt;The chart above shows that for any market segment, there is an IBM RDBMS that fills the need.&amp;nbsp; The Orange represents database access types or patterns.&amp;nbsp; OLTP versus Decision Support versus Data Mart versus Data Warehouse.&amp;nbsp; The Pink represents organization size or type.&amp;nbsp; Student developers versus business startups versus established small businesses versus medium sized business versus large business versus ISVs and VARs.&amp;nbsp; The Green represents the data store type Relational versus Object Relational.&lt;br /&gt;&lt;br /&gt;Opposite this all is the Blue section at the top showing the Informix portion of the IBM DBMS product line and my suggestions for price-point positioning.&amp;nbsp; I do believe that DB2 LUW and SolidDB Cache (as well as the SolidDB embedded database) are part of this same single product line strategy, I only did not include them because I produced this to answer Rob's notion of an "Informix Product Strategy" so I concentrated on that.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;That's it.&amp;nbsp; Comments from the field or from IBM are welcome.&amp;nbsp; Let's start a discussion around this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-27945510349180435?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/27945510349180435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2010/05/selling-informix.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/27945510349180435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/27945510349180435'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2010/05/selling-informix.html' title='Selling Informix'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xtyozsl6He4/S92b2XsxGKI/AAAAAAAAAHQ/DyRycVMJcV0/s72-c/Informix+Marketplace.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3392197078789890903.post-3697040697773661614</id><published>2010-04-29T14:29:00.003-04:00</published><updated>2010-04-29T14:43:27.197-04:00</updated><title type='text'>After the IIUG Conference</title><content type='html'>Just a quick word:&lt;br /&gt;&lt;br /&gt;The International Informix Users' Group Conference for 2010 is over.  The members of the IIUG Board of Directors are winding down and catching our breath.  I'm posting my first ever Blog posting to this my new blog.  It's weird.&lt;br /&gt;&lt;br /&gt;Anyway I'm posting during a break in the action at the IBM Customer Advisory Council meeting here in Overland Park KS.  The conference we GREAT!  Attendence was up noticeably from last year with attendees from 22 or 24 countries (depending on who was counting and whether we count Kansas as a separate country).  There were users here from as far away as Malaysia and Venezuala, from all four corners and borders of the US. &lt;br /&gt;&lt;br /&gt;IBM execs and, support people, and technical folk have been incredibly receptive to and active in acquiring our needs and requirements for product features, support, marketing, etc.  It has been a very gratifying experience.&lt;br /&gt;&lt;br /&gt;Overall, the atmosphere has been very positive which is a change from last year.  Altogether a good conference.  If you were not here this year, plan to attend next year!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3392197078789890903-3697040697773661614?l=informix-myview.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://informix-myview.blogspot.com/feeds/3697040697773661614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://informix-myview.blogspot.com/2010/04/after-iiug-conference.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/3697040697773661614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3392197078789890903/posts/default/3697040697773661614'/><link rel='alternate' type='text/html' href='http://informix-myview.blogspot.com/2010/04/after-iiug-conference.html' title='After the IIUG Conference'/><author><name>Art S. Kagel</name><uri>http://www.blogger.com/profile/12105385401154939025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_Xtyozsl6He4/S9nUAKkeDRI/AAAAAAAAAGs/k7P_RiE5W6c/S220/MyPhoto+002.jpg'/></author><thr:total>2</thr:total></entry></feed>
