{"id":2147,"date":"2010-09-30T02:24:19","date_gmt":"2010-09-29T16:24:19","guid":{"rendered":"http:\/\/www.flamingspork.com\/blog\/?p=2147"},"modified":"2010-09-30T02:24:19","modified_gmt":"2010-09-29T16:24:19","slug":"what-was-innodb","status":"publish","type":"post","link":"https:\/\/www.flamingspork.com\/blog\/2010\/09\/30\/what-was-innodb\/","title":{"rendered":"What was InnoDB+?"},"content":{"rendered":"<p><a href=\"http:\/\/www.xaprb.com\/blog\/2009\/12\/12\/what-do-you-know-about-oracles-innodb-plus-storage-engine\/\">Yes, I said InnoDB+ with a plus sign at the end<\/a> (also see the first comment <a href=\"http:\/\/www.pythian.com\/news\/6747\/save-mysql-by-letting-oracle-keep-it-gpl\/\">here<\/a>).<\/p>\n<p style=\"padding-left: 30px;\">Please note that this blog post is only based on <strong>public<\/strong> information. It has absolutely <strong>nothing in it<\/strong> that I only could have learned from back when I worked at Sun or MySQL AB. Everything has links or pointers to where you can find the information out on the\u00c2\u00a0Internet and all thoughts are based on stringing these things together.<\/p>\n<p>There was a lot of talk around the\u00c2\u00a0acquisition\u00c2\u00a0of Sun Microsystems by Oracle about MySQL (MySQL AB was bought by Sun). Some of the talk centred around Oracle and their ability to make a closed source version of MySQL with added bits that wouldn&#8217;t be released as GPL. They&#8217;ve since proved that they&#8217;re quite willing to do this to an open source project (see <a href=\"http:\/\/en.wikipedia.org\/wiki\/OpenSolaris\">OpenSolaris<\/a>).<\/p>\n<p>Relatively recently, a bunch of history from the old InnoDB SVN trees was imported into the MySQL source tree. You can pull the revision of the SVN tree as of InnoDB Plugin 1.0.6 release by using revid:\u00ef\u00bb\u00bfsvn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/zip:6263 \u00c2\u00a0from the MySQL repository &#8211; or just use a branch I&#8217;ve put up on launchpad for it (<a href=\"https:\/\/code.launchpad.net\/~stewart\/haildb\/innodb-1.0.6-from-svn\">lp:~stewart\/haildb\/innodb-1.0.6-from-svn<\/a>).<\/p>\n<p>The first revision from the SVN tree was created on 2005-10-27, which you may remember was not too long after <a href=\"http:\/\/www.oracle.com\/innodb\/index.html\">Oracle acquired Innobase on the 7th of October<\/a> that year. The next two revisions were importing the 5.0 innodb code base, and then the 5.1 code base. Previous history can be found according to <a href=\"http:\/\/blogs.innodb.com\/wp\/2010\/09\/innodb-revision-history\/\">this blog post on Transactions on InnoDB<\/a>.<\/p>\n<p>According to Monty in the <a href=\"http:\/\/www.pythian.com\/news\/6747\/save-mysql-by-letting-oracle-keep-it-gpl\/\">comment on the Pythian blog<\/a>:<\/p>\n<p style=\"padding-left: 30px;\">Oracle did work on a closed source version of InnoDB, codename InnoDB+, but they never released it, probably because our contract with them stopped them.<\/p>\n<p>and from <a href=\"http:\/\/www.softwarefreedom.org\/resources\/2009\/Oracle-Sun-EC-opinion.pdf\">Eben Moglen&#8217;s letter to the EU Commission<\/a> (via <a href=\"http:\/\/www.xaprb.com\/blog\/2009\/12\/12\/what-do-you-know-about-oracles-innodb-plus-storage-engine\/\">Baron Schwartz&#8217;s blog post<\/a>):<\/p>\n<p style=\"padding-left: 30px;\">Innobase could therefore have provided an enhanced version of InnoDB, like Oracle\u00e2\u20ac\u2122s current InnoDB+, under non-GPL license<\/p>\n<p>Most tellingly is a lot of references in the revision history to &#8220;branches\/innodb+&#8221; as well as this commit:<\/p>\n<p style=\"padding-left: 30px;\">\n<p style=\"padding-left: 30px;\">revno: 0.5.148<br \/>\nrevision-id: svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:6329<br \/>\nparent: svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:6322<br \/>\ncommitter: vasil<br \/>\ntimestamp: Thu 2009-12-17 11:00:17 +0000<br \/>\nmessage:<br \/>\nbranches\/innodb+: change name and version<br \/>\nChange name from &#8220;InnoDB Plugin&#8221; to &#8220;InnoDB+&#8221; and<br \/>\nversion from 1.0.5 to 1.0.0.<\/p>\n<p>So, from the revision history I&#8217;ve managed to work out that it likely was going to have the following features:<\/p>\n<ul>\n<li><strong>innodb_change_buffering<\/strong> (for values other than inserts)\n<div id=\"_mcePaste\">See revid:svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/zip:4061<br \/>\nOr, more tellingly revid:svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:4053<br \/>\nThe latter tells about the merge of change buffering for delete-mark and delete in addition to the default of inserts.<\/div>\n<\/li>\n<li>Possibly <strong>compressed tables.<\/strong><br \/>\nrevid:svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:2316 seems to show that it may have been copied across: &#8220;branches\/innodb+: Copy from branches\/zip r2315&#8221; in the comment. \u00c2\u00a0There&#8217;s a lot of other merges of branches\/zip as well<\/li>\n<li><strong>Something named FTS<br \/>\n<\/strong>There is &#8220;branches\/fts&#8221; in revid:svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:2325 and revid:svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:2324 \u00c2\u00a0(there&#8217;s an import of a red-black tree implementation)<br \/>\nIf you also look at revid:\u00c2\u00a0svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:6776<br \/>\nyou&#8217;ll see references to a innofts+ branch with ha_innodb.cc in it.<br \/>\nSo between a red-black tree and handler changes, this is surely something interesting.<\/li>\n<li><strong>Persistent statistics<\/strong> (also revid:\u00c2\u00a0svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:6776)<\/li>\n<li><strong>Metrics Table<\/strong> (also revid:\u00c2\u00a0svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:6776)<\/li>\n<li><strong>posix_fadvise() hints<\/strong> to temp files used in creating indexes (revid:svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:2342 )<\/li>\n<li><strong>Improved recovery performance<\/strong><br \/>\nSee revid:svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:2989<br \/>\nTalks about using the red-black tree for sorted insertion into the flush_list<\/li>\n<li><strong>native linux aio<\/strong> (revid:svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:3913 )<\/li>\n<li><strong>group commit <\/strong>(revid:svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:3923 )<\/li>\n<li><strong>New mutex to protect flush_list<\/strong> (revid:svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:6330)<\/li>\n<\/ul>\n<p>and finally, in revid:svn-v4:16c675df-0fcb-4bc9-8058-dcc011a37293:branches\/innodb%2B:6819 you can see the change from &#8220;InnoDB+&#8221; back to &#8220;InnoDB&#8221; for being the built in default for MySQL 5.5<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Yes, I said InnoDB+ with a plus sign at the end (also see the first comment here). Please note that this blog post is only based on public information. It has absolutely nothing in it that I only could have &hellip; <a href=\"https:\/\/www.flamingspork.com\/blog\/2010\/09\/30\/what-was-innodb\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[75,14],"tags":[374,257,628,250],"class_list":["post-2147","post","type-post","status-publish","format-standard","hentry","category-drizzle-work-et-al","category-mysql","tag-history","tag-innodb","tag-mysql","tag-oracle"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5a6n8-yD","jetpack-related-posts":[{"id":3676,"url":"https:\/\/www.flamingspork.com\/blog\/2014\/02\/14\/ghosts-of-mysql-past-part-5-the-era-of-acquisitions\/","url_meta":{"origin":2147,"position":0},"title":"Ghosts of MySQL Past Part 5: The Era of Acquisitions","author":"Stewart Smith","date":"2014-02-14","format":false,"excerpt":"This week I've been writing based on my linux.conf.au 2014 talk, which you can watch the recording of. Also see Part 1, Part 2, Part 3 and Part 4. My feed feel off Planet MySQL for a bit so you may have missed those posts. Now we head into the\u2026","rel":"","context":"In &quot;mysql&quot;","block_context":{"text":"mysql","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2418,"url":"https:\/\/www.flamingspork.com\/blog\/2011\/11\/21\/information-on-bug12704861-which-doesnt-exist-in-any-public-bug-tracker\/","url_meta":{"origin":2147,"position":1},"title":"Information on Bug#12704861 (which doesn&#8217;t exist in any public bug tracker)","author":"Stewart Smith","date":"2011-11-21","format":false,"excerpt":"Some of you may be aware that MySQL is increasingly using an Oracle-internal bug tracker. You can see these large bug numbers mentioned alongside smaller public bug numbers in recent MySQL release notes. If you're particularly unlucky, you \u00c2\u00a0just get a big Oracle-internal bug number. For a recently fixed bug,\u2026","rel":"","context":"In &quot;mysql&quot;","block_context":{"text":"mysql","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3291,"url":"https:\/\/www.flamingspork.com\/blog\/2013\/04\/18\/where-are-they-now-mysql-storage-engines\/","url_meta":{"origin":2147,"position":2},"title":"Where are they now: MySQL Storage Engines","author":"Stewart Smith","date":"2013-04-18","format":false,"excerpt":"There was once a big hooplah about the MySQL Storage Engine Architecture and how it was easy to just slot in some other method of storage instead of the provided ones. Over the years I've repeatedly mentioned how this wasn't really the case and that it was remarkably non trivial.\u2026","rel":"","context":"In &quot;code&quot;","block_context":{"text":"code","link":"https:\/\/www.flamingspork.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3778,"url":"https:\/\/www.flamingspork.com\/blog\/2014\/07\/17\/update-on-mysql-on-power8\/","url_meta":{"origin":2147,"position":3},"title":"Update on MySQL on POWER8","author":"Stewart Smith","date":"2014-07-17","format":false,"excerpt":"About 1.5 months ago I blogged on MySQL 5.6 on POWER andtalked about what I had to poke at to make modern MySQL versions run and run well on shiny POWER8 systems. One of those bugs, MySQL bug 47213 (InnoDB mutex\/rw_lock should be conscious of memory ordering other than Intel)\u2026","rel":"","context":"In &quot;code&quot;","block_context":{"text":"code","link":"https:\/\/www.flamingspork.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3685,"url":"https:\/\/www.flamingspork.com\/blog\/2014\/02\/25\/ghosts-of-mysql-past-part-7-pbxt\/","url_meta":{"origin":2147,"position":4},"title":"Ghosts of MySQL Past, Part 7: PBXT","author":"Stewart Smith","date":"2014-02-25","format":false,"excerpt":"Recently, I\u00e2\u20ac\u2122ve been writing based on my linux.conf.au 2014 talk, which you can watch the recording of. Also see Part 1, Part 2, Part 3, Part 4, Part 5 and Part 6. My feed feel off Planet MySQL for a bit so you may have missed those posts - so\u2026","rel":"","context":"In &quot;General&quot;","block_context":{"text":"General","link":"https:\/\/www.flamingspork.com\/blog\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3304,"url":"https:\/\/www.flamingspork.com\/blog\/2013\/05\/13\/the-mysql-cluster-storage-engine\/","url_meta":{"origin":2147,"position":5},"title":"The MySQL Cluster storage engine","author":"Stewart Smith","date":"2013-05-13","format":false,"excerpt":"This is one close to my heart. I've recently written on other storage engines:\u00c2\u00a0Where are they now: MySQL Storage Engines,\u00c2\u00a0The MERGE storage engine: not dead, just resting\u00e2\u20ac\u00a6. or forgotten\u00c2\u00a0and The MEMORY storage engine. Today, it's the turn of MySQL Cluster. Like InnoDB, MySQL Cluster started outside of MySQL. Those of\u2026","rel":"","context":"In &quot;code&quot;","block_context":{"text":"code","link":"https:\/\/www.flamingspork.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/2147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/comments?post=2147"}],"version-history":[{"count":1,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/2147\/revisions"}],"predecessor-version":[{"id":2148,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/2147\/revisions\/2148"}],"wp:attachment":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/media?parent=2147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/categories?post=2147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/tags?post=2147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}