<?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-1526532204016125586</id><updated>2011-12-02T09:49:26.560+01:00</updated><category term='mysql'/><title type='text'>jonas blog</title><subtitle type='html'>Stuff related to mysql cluster kernel internals</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-1397331045761150127</id><published>2011-10-13T10:01:00.001+02:00</published><updated>2011-10-28T08:42:27.513+02:00</updated><title type='text'>Brewing in MySQL Cluster 7.2.x</title><content type='html'>Admittedly MySQL Cluster have some way to go before monitoring becomes best in class. But, we are progressing!&lt;br /&gt;In 7.1 we introduced NDBINFO, which is an infrastructure that enables presenting information from within the cluster in SQL format.&lt;br /&gt;And here are a 4 new tables that are currently brewing&lt;br /&gt;&lt;hr /&gt;&lt;div align="center"&gt;&lt;b&gt;ndbinfo.transactions&lt;/b&gt; and &lt;b&gt;ndbinfo.operations&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;mysql&amp;gt; select COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT from information_schema.columns where TABLE_NAME = 'ndb$transactions';&lt;br /&gt;+----------------+-----------+---------------------------------+&lt;br /&gt;| COLUMN_NAME    | DATA_TYPE | COLUMN_COMMENT                  |&lt;br /&gt;+----------------+-----------+---------------------------------+&lt;br /&gt;| node_id        | int       | node id                         |&lt;br /&gt;| block_instance | int       | TC instance no                  |&lt;br /&gt;| objid          | int       | Object id of transaction object |&lt;br /&gt;| apiref         | int       | API reference                   |&lt;br /&gt;| transid        | varchar   | Transaction id                  |&lt;br /&gt;| state          | int       | Transaction state               |&lt;br /&gt;| flags          | int       | Transaction flags               |&lt;br /&gt;| c_ops          | int       | No of operations in transaction |&lt;br /&gt;| outstanding    | int       | Currently outstanding request   |&lt;br /&gt;| timer          | int       | Timer (seconds)                 |&lt;br /&gt;+----------------+-----------+---------------------------------+&lt;br /&gt;mysql&amp;gt; select COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT from information_schema.columns where TABLE_NAME = 'ndb$operations';&lt;br /&gt;+----------------+-----------+-------------------------------+&lt;br /&gt;| COLUMN_NAME    | DATA_TYPE | COLUMN_COMMENT                |&lt;br /&gt;+----------------+-----------+-------------------------------+&lt;br /&gt;| node_id        | int       | node id                       |&lt;br /&gt;| block_instance | int       | LQH instance no               |&lt;br /&gt;| objid          | int       | Object id of operation object |&lt;br /&gt;| tcref          | int       | TC reference                  |&lt;br /&gt;| apiref         | int       | API reference                 |&lt;br /&gt;| transid        | varchar   | Transaction id                |&lt;br /&gt;| tableid        | int       | Table id                      |&lt;br /&gt;| fragmentid     | int       | Fragment id                   |&lt;br /&gt;| op             | int       | Operation type                |&lt;br /&gt;| state          | int       | Operation state               |&lt;br /&gt;| flags          | int       | Operation flags               |&lt;br /&gt;+----------------+-----------+-------------------------------+&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;these two tables show currently ongoing transactions resp. currently ongoing operations.&lt;/li&gt;&lt;li&gt;&lt;i&gt;ndbinfo.transactions&lt;/i&gt; roughly corresponds to &lt;a href="http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-information-schema-innodb_trx.html"&gt;&lt;i&gt;information_schema.INNODB_TRX&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;ndbinfo.operations&lt;/i&gt; roughly corresponds to &lt;a href="http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-information-schema-innodb_locks.html"&gt;&lt;i&gt;information_schema.INNODB_LOCKS&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;the information provided is collected without any kind of locks&lt;/li&gt;&lt;li&gt;the information provided is collected by iterating internal data-structures. Hence output does not necessarily represent a state that has existed (i.e not a snapshot)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;one missing piece of this puzzle is how to map a ndb transaction id, to a mysql connection id.&lt;br /&gt;when (if?) this information is available, one could e.g join &lt;i&gt;information_schema.processlist&lt;/i&gt; with &lt;i&gt;ndbinfo.operations&lt;/i&gt; too see locks are being held by a certain connection.(suggestion on how to gather/expose this is welcome).&lt;br /&gt;&lt;hr /&gt;&lt;div align="center"&gt;&lt;b&gt;ndbinfo.threadblocks&lt;/b&gt; and &lt;b&gt;ndbinfo.threadstat&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;mysql&amp;gt; select COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT from information_schema.columns where TABLE_NAME = 'ndb$threadblocks';&lt;br /&gt;+----------------+-----------+----------------+&lt;br /&gt;| COLUMN_NAME    | DATA_TYPE | COLUMN_COMMENT |&lt;br /&gt;+----------------+-----------+----------------+&lt;br /&gt;| node_id        | int       | node id        |&lt;br /&gt;| thr_no         | int       | thread number  |&lt;br /&gt;| block_number   | int       | block number   |&lt;br /&gt;| block_instance | int       | block instance |&lt;br /&gt;+----------------+-----------+----------------+&lt;br /&gt;&lt;br /&gt;mysql&amp;gt; select COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT from information_schema.columns where TABLE_NAME = 'ndb$threadstat';&lt;br /&gt;+----------------+-----------+------------------------------------------+&lt;br /&gt;| COLUMN_NAME    | DATA_TYPE | COLUMN_COMMENT                           |&lt;br /&gt;+----------------+-----------+------------------------------------------+&lt;br /&gt;| node_id        | int       | node id                                  |&lt;br /&gt;| thr_no         | int       | thread number                            |&lt;br /&gt;| thr_nm         | varchar   | thread name                              |&lt;br /&gt;| c_loop         | bigint    | No of loops in main loop                 |&lt;br /&gt;| c_exec         | bigint    | No of signals executed                   |&lt;br /&gt;| c_wait         | bigint    | No of times waited for more input        |&lt;br /&gt;| c_l_sent_prioa | bigint    | No of prio A signals sent to own node    |&lt;br /&gt;| c_l_sent_priob | bigint    | No of prio B signals sent to own node    |&lt;br /&gt;| c_r_sent_prioa | bigint    | No of prio A signals sent to remote node |&lt;br /&gt;| c_r_sent_priob | bigint    | No of prio B signals sent to remote node |&lt;br /&gt;| os_tid         | bigint    | OS thread id                             |&lt;br /&gt;| os_now         | bigint    | OS gettimeofday (millis)                 |&lt;br /&gt;| os_ru_utime    | bigint    | OS user CPU time (micros)                |&lt;br /&gt;| os_ru_stime    | bigint    | OS system CPU time (micros)              |&lt;br /&gt;| os_ru_minflt   | bigint    | OS page reclaims (soft page faults       |&lt;br /&gt;| os_ru_majflt   | bigint    | OS page faults (hard page faults)        |&lt;br /&gt;| os_ru_nvcsw    | bigint    | OS voluntary context switches            |&lt;br /&gt;| os_ru_nivcsw   | bigint    | OS involuntary context switches          |&lt;br /&gt;+----------------+-----------+------------------------------------------+&lt;br /&gt;&lt;/pre&gt;these two tables shows currently which blocks run in which thread resp. statistics per thread.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the statistics are from data-node started, so to see trend, one need to snapshot table,and compare with snapshot.&lt;/li&gt;&lt;li&gt;the fields starting with &lt;code&gt;os_ru_&lt;/code&gt; are gather with &lt;i&gt;getrusage(RUSAGE_THREAD)&lt;/i&gt; (or equivalent)&lt;/li&gt;&lt;/ul&gt;lots of numbers! and I'm honestly not quite sure how to interpret them&lt;br /&gt;a few simple rules &lt;b&gt;might&lt;/b&gt; be that (for a non idle cluster)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;user time should be high and system should be low&lt;/li&gt;&lt;li&gt;involuntary context switches should be low&lt;/li&gt;&lt;li&gt;page faults should be low&lt;/li&gt;&lt;/ul&gt;&lt;hr /&gt;&lt;b&gt;STANDARD DISCLAIMER&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the exact format of the tables might (will) change before reaching a release&lt;li&gt;it's currently unknown when(if?) they will reach a release near you&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-1397331045761150127?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/1397331045761150127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=1397331045761150127' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/1397331045761150127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/1397331045761150127'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2011/10/brewing-for-mysql-cluster-72x.html' title='Brewing in MySQL Cluster 7.2.x'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-4807957882798062946</id><published>2011-10-10T09:12:00.000+02:00</published><updated>2011-10-10T10:12:15.203+02:00</updated><title type='text'>new features in MySQL Cluster 7.2.1</title><content type='html'>&lt;ul&gt;&lt;li&gt;AQL (aka push down join)&lt;br /&gt;Further improvements and refinements compared to 7.2.0 from April&lt;/li&gt;&lt;li&gt;Index statistics&lt;br /&gt;A long over due feature, that aims to reduce(minimize) need of manual query tuning that previously has been essential for efficient SQL usage with ndb.&lt;/li&gt;&lt;li&gt;memcache access support&lt;/li&gt;&lt;li&gt;Active-Active replication enhancements&lt;/li&gt;&lt;li&gt;Various internal limits has been increased&lt;br /&gt;- Max row-size now 14k (previously 8k)&lt;br /&gt;- Max no of columns in table now 512 (previously 128)&lt;/li&gt;&lt;li&gt;Rebase to mysql-5.5 (7.2.1 is based on mysql-5.5.15)&lt;/li&gt;&lt;li&gt;Improved support for geographically separated cluster&lt;br /&gt;(note: single cluster...i.e not using asynchronous replication)&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Brief introduction to AQL (aka join pushdown)&lt;/h3&gt;Basic concept is to evaluate joins down in data-nodes instead(in addition to) of in mysqld.&lt;br /&gt;Ndb will examine query plan created by mysqld, and construct a serialized definition of this join, ship it down to data-nodes.&lt;br /&gt;This join will in the data-nodes be evaluated in parallel (if appropriate), and the result set will be sent back to mysqld using a streaming interface.&lt;br /&gt;Performance gain (latency reduction) is &lt;b&gt;normally&lt;/b&gt; in the range of 20x for a 3-way join.&lt;br /&gt;&lt;h3&gt;Brief introduction to Index statistics&lt;/h3&gt;The index statistics works a lot like &lt;i&gt;Innodb persistent statistics&lt;/i&gt;.&lt;br /&gt;When you execute &lt;b&gt;analyze table T&lt;/b&gt;, data nodes will scan the indexes of &lt;b&gt;T&lt;/b&gt; and produce a histogram of each index.&lt;br /&gt;This histogram is stored in tables in ndb (&lt;code&gt;mysql.ndb_index_stat_head&lt;/code&gt; and &lt;code&gt;mysql.ndb_index_stat_sample&lt;/code&gt;).The histogram can then be used by any mysqld connected to this cluster.The histogram will not be generated until a new &lt;b&gt;analyze table T&lt;/b&gt; is requested.&lt;br /&gt;&lt;h3&gt;Brief introduction to Active-Active enhancements&lt;/h3&gt;MySQL Cluster has supported active-active asynchronous replication with conflict detection and conflict resolution since 6.3.&lt;br /&gt;In prior version, the schema had to be modified, adding a timestamp column to each table and application has to be modified to maintain this timestamp column.&lt;br /&gt;In this new version, no schema modification is required and no application modification is needed.&lt;br /&gt;In previous version, conflict detection/resolution was performed on row-by-row basis.&lt;br /&gt;In this new version, transaction boundaries are respected.&lt;br /&gt;E.g in a row &lt;b&gt;R&lt;/b&gt; is determined to be in conflict, not only this row-change will be resolved,&lt;br /&gt;but entire transaction &lt;b&gt;T&lt;/b&gt; that modified the row will be resolved and all transactions depending on the &lt;b&gt;T&lt;/b&gt; transitively.&lt;br /&gt;Longer descriptions can be found &lt;a href="http://messagepassing.blogspot.com/2011/10/eventual-consistency-with-transactions.html"&gt;here&lt;/a&gt; and &lt;a href="http://messagepassing.blogspot.com/2011/10/eventual-consistency-with-mysql.html"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;hr /&gt;Sorry for omitting hex dumps and/or unformatted numbers&lt;br /&gt;&lt;hr /&gt;Mandatory late update: the join described &lt;a href="http://www.clusterdb.com/mysql-cluster/70x-faster-joins-with-aql-in-mysql-cluster-7-2-dmr/"&gt;here&lt;/a&gt; has now gained an extra 2x (but this improvement did not make 7.2.1)&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/1526532204016125586-4807957882798062946?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/4807957882798062946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=4807957882798062946' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/4807957882798062946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/4807957882798062946'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2011/10/new-features-in-mysql-cluster-721.html' title='new features in MySQL Cluster 7.2.1'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-6562718871668412106</id><published>2011-05-10T08:03:00.008+02:00</published><updated>2011-05-10T08:18:19.483+02:00</updated><title type='text'>Star schema benchmark on MySQL Cluster 7.2</title><content type='html'>I decided to try the star schema benchmark on our latest 7.2 release (&lt;a href="http://dev.mysql.com/downloads/cluster/7.2.html"&gt;link&lt;/a&gt;). Star schema benchmark is an analytics oriented benchmark, and MySQL Cluster has not been developed to address this kind of workload. Nevertheless I couldn't resist trying...&lt;br /&gt;&lt;h3&gt;Setup&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;2 data-nodes each running on a 4-way Xeon E7420 @ 2.13GHx (total 16 cores) 256Gb RAM&lt;/li&gt;&lt;li&gt;The mysqld was co-located with one of the data-nodes&lt;/li&gt;&lt;li&gt;I used memory tables&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Results&lt;/h3&gt;&lt;br /&gt;Queries: &lt;a href="http://www.percona.com/docs/wiki/benchmark:ssb:start"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;table border="1" cellpadding="1" cellspacing="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Query&lt;/th&gt;&lt;th&gt;sf10&lt;/th&gt;&lt;th&gt;sf100&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q1.1&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;62&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q1.2&lt;/td&gt;&lt;td&gt;0.4&lt;/td&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q1.3&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q2.1&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q2.2&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;495&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q2.3&lt;/td&gt;&lt;td&gt;51&lt;/td&gt;&lt;td&gt;517&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q3.1&lt;/td&gt;&lt;td&gt;47&lt;/td&gt;&lt;td&gt;481&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q3.2&lt;/td&gt;&lt;td&gt;47&lt;/td&gt;&lt;td&gt;476&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q3.3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q3.4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q4.1&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;572&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q4.2&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;574&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Q4.3&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;(time in sec, less time is better)&lt;br /&gt;&lt;h3&gt;Facts&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;I have done no analysis to why some queries are faster than others&lt;/li&gt;&lt;li&gt;This type of queries is currently not in focus of our efforts to improve join performance (nor has it been so far)&lt;/li&gt;&lt;li&gt;for lineorder table I specified &lt;em&gt;max_rows=500000000&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;ndb_join_pushdown=on&lt;/em&gt; (default in 7.2)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Thoughts and guesses&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;sf100 is almost exactly 10x slower than sf10. So I think a reasonable guess is that sf1000 is 10x slower than sf100&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Star schema benchmark is an easy benchmark (compared to e.g TPC-H)&lt;/li&gt;&lt;li&gt;I think results looks quite good&lt;/li&gt;&lt;li&gt;My guess is that scaling out (e.g to 4 nodes) would scale well (although I didn't try) (e.g scale out by running 2 ndbmtd on each machine)&lt;/li&gt;&lt;li&gt;Running high write load in parallel doesnt increase query times signficantly (as tested in &lt;a href="http://assets.en.oreilly.com/1/event/36/MySQL%20Cluster%20and%20Pushdown-joins%20_In%20Pursuit%20of%20the%20Holy%20Grail_%20Presentation.pdf"&gt;presentation&lt;/a&gt; page 45-46) which is quite cool (although I didn't try this time)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Load procedure for sf100&lt;br /&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;I manually split the 61Gb file (lineorder) into 10 6Gb files (using &lt;em&gt;split(1)&lt;/em&gt;)&lt;/li&gt;&lt;li&gt;Then I loaded these 10 in parallel with 10 clients using &lt;em&gt;load data infile&lt;/em&gt;&lt;/li&gt;&lt;li&gt;I disabled indexes while loading using &lt;em&gt;ndb_restore --disable-indexes&lt;/em&gt; (from an backup made on empty db containing just schema definition)&lt;/li&gt;&lt;li&gt;I then rebuilt the indexes using &lt;em&gt;ndb_restore --rebuild-indexes&lt;/em&gt; using &lt;em&gt;BuildIndexThreads=15&lt;/em&gt; in config.ini&lt;/li&gt;&lt;/ul&gt;(for sf10 i did nothing special)&lt;br /&gt;&lt;h3&gt;Load time for sf100&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;4h including rebuilding of indexes&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;References&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mysqlperformanceblog.com/2010/01/07/star-schema-bechmark-infobright-infinidb-and-luciddb/"&gt;Blog where percona tries SSB&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;hr /&gt;&lt;h3&gt;Last minute update&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;OleJohn reports that Q2.2 and Q2.3 should be 10x faster if forcing a different join order (e.g by using &lt;em&gt;straight_join&lt;/em&gt; or &lt;em&gt;force index&lt;/em&gt;). But this I haven't tried&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-6562718871668412106?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/6562718871668412106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=6562718871668412106' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/6562718871668412106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/6562718871668412106'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2011/05/star-schema-benchmark-on-mysql-cluster.html' title='Star schema benchmark on MySQL Cluster 7.2'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-411233712816367679</id><published>2010-11-04T11:51:00.004+01:00</published><updated>2010-11-05T07:47:56.551+01:00</updated><title type='text'>distributed pushed down joins - webinar and new preview available</title><content type='html'>as part of the &lt;a href="http://www.mysql.com/news-and-events/web-seminars/display-583.html"&gt;webinar&lt;/a&gt; tonight we made a new preview release &lt;a href="ftp://ftp.mysql.com:/pub/mysql/download/cluster_telco/mysql-5.1.51-ndb-7.1.9-spj-preview/mysql-spj-preview-7.1.9-src.tar.gz"&gt;src&lt;/a&gt; and &lt;a href="ftp://ftp.mysql.com:/pub/mysql/download/cluster_telco/mysql-5.1.51-ndb-7.1.9-spj-preview/mysql-spj-preview-7.1.9-linux-x86_64-glibc23.tar.gz"&gt;binary&lt;/a&gt; (linux x86-64 glibc23).&lt;br /&gt;&lt;br /&gt;this includes pushing of &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/explain-output.html"&gt;ref&lt;/a&gt; that was not supported in last preview release as well as latest and greatest new optimizations.&lt;br /&gt;&lt;br /&gt;note that this is still not production ready code.&lt;br /&gt;but...we welcome any feedback on it!&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Nov 5: And feedback can be sent to spj-feedback@sun.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-411233712816367679?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/411233712816367679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=411233712816367679' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/411233712816367679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/411233712816367679'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2010/11/distributed-pushed-down-joins-webinar.html' title='distributed pushed down joins - webinar and new preview available'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-1164025800112636889</id><published>2010-08-25T11:46:00.008+02:00</published><updated>2010-08-26T00:47:24.352+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>distributed pushed down joins - progress and attitude</title><content type='html'>we're now at a stage so we can test/benchmark scan/scan queries, i.e push most queries. there are still know bugs and things that we can't push.&lt;br /&gt;&lt;br /&gt;to see how we performs, we tested a very old query/dataset, that a customer tried in the 4.1 days. the result at that time was a disaster, and they at that time decided to use something else.&lt;br /&gt;&lt;br /&gt;it's a 11-way join with mainly REF accesses (i.e not many lookups)&lt;br /&gt;&lt;br /&gt;i tested it on same hardware/configuration as for my UC &lt;a href="http://assets.en.oreilly.com/1/event/36/MySQL%20Cluster%20and%20Pushdown-joins%20_In%20Pursuit%20of%20the%20Holy%20Grail_%20Presentation.pdf"&gt;presentation&lt;/a&gt;.&lt;br /&gt;without join pushdown the average query time is 3.6s.&lt;br /&gt;with join pushdown it's ~500ms, i.e ~&lt;span style="font-weight: bold;"&gt;7x&lt;/span&gt; improvement.&lt;br /&gt;&lt;br /&gt;the nights of kni are deeply disappointed, and that's an attitude i like :-)&lt;br /&gt;&lt;br /&gt;FYI: we also optimized TPCW::getBestSeller some more and are now at &lt;span style="font-weight: bold;"&gt;42x&lt;/span&gt; on that hardware/configuration.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;stay tuned&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;micro update: Found a bug when using ndbmtd...fixing that gave 200ms (i.e 18x)...also did some more optimizations and now record is 120ms (i.e 29x)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-1164025800112636889?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/1164025800112636889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=1164025800112636889' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/1164025800112636889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/1164025800112636889'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2010/08/distributed-pushed-down-joins-progress.html' title='distributed pushed down joins - progress and attitude'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-7959018391401191829</id><published>2010-05-20T13:54:00.003+02:00</published><updated>2010-05-20T15:22:15.216+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>distributed pushed down joins - node-failure handling done</title><content type='html'>node-failure handling was as expected lots of small changes to various pieces of the code.&lt;br /&gt;some non compatible protocol changes performed (nice not to have any existing GA release to care about :)&lt;br /&gt;&lt;br /&gt;also when doing this, I re-implemented entire "abort of join"-handling.&lt;br /&gt;it should now also be capable of handling aborting more complex joins&lt;br /&gt;(but node-failure is still an special case)&lt;br /&gt;&lt;br /&gt;this means that "testSpj -n NF_Join" now passes!!&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;this is an important step towards a releasable version.&lt;br /&gt;&lt;br /&gt;note: this has only been implemented in the branch which also contains extension for scan.vs.scan joins. I.e not in the branch released as preview.&lt;br /&gt;&lt;br /&gt;and, OleJohn integrated support for filters on child-joins with mysqld.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;And as always please provide &lt;a href="http://johanandersson.blogspot.com/2010/04/mysql-cluster-spj-preview-feedback_27.html"&gt;feedback&lt;/a&gt; on preview release that we made!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-7959018391401191829?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/7959018391401191829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=7959018391401191829' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7959018391401191829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7959018391401191829'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2010/05/distributed-pushed-down-joins-node.html' title='distributed pushed down joins - node-failure handling done'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-6794374230283638469</id><published>2010-05-12T13:34:00.003+02:00</published><updated>2010-05-12T13:46:07.927+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>distributed pushed down joins - more testing</title><content type='html'>have now written and pushed ndbapi testing of our push-down join implementation (~2k LOC)&lt;br /&gt;&lt;br /&gt;the following classes/programs was added&lt;br /&gt;&lt;ul&gt;&lt;li&gt;HugoQueryBuilder (class)&lt;br /&gt;Construct a pseudo-random query&lt;br /&gt;inputs: a list of tables and a options specifying which features should be used in query&lt;/li&gt;&lt;li&gt;HugoQueries (class)&lt;br /&gt;Run an arbitrary query.&lt;br /&gt;Note: Does only verify individual rows, not relations/result-set. For verifying result-sets we use random query generator&lt;/li&gt;&lt;li&gt;testSpj (program)&lt;br /&gt;Ndbapi test-program using above classes to runs various tests for our cluster specific automatic testing framework&lt;/li&gt;&lt;li&gt;hugoJoin (program)&lt;br /&gt;Stand-alone test-program that takes list of tables/options as command-line arguments&lt;br /&gt;and using above classes constructs/runs random queries&lt;/li&gt;&lt;/ul&gt;Quite happy with this, as it's very much needed to get good coverage of the implementation,&lt;br /&gt;especially error cases (e.g node-failure) which is hard to test from/with SQL.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;And please provide &lt;a href="http://johanandersson.blogspot.com/2010/04/mysql-cluster-spj-preview-feedback_27.html"&gt;feedback&lt;/a&gt; on preview release that we made!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-6794374230283638469?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/6794374230283638469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=6794374230283638469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/6794374230283638469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/6794374230283638469'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2010/05/distributed-pushed-down-joins-more_12.html' title='distributed pushed down joins - more testing'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-8016363871943408027</id><published>2010-05-07T14:02:00.003+02:00</published><updated>2010-05-07T14:27:16.521+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>distributed pushed down joins - more features</title><content type='html'>update on latest accomplishments:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;added support for filters (compare engine_condition_pushdown) on non-root operations, this in 2 flavors:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;- constant/immediate filters that is provided after NdbQuery has been defined, these may not contains filter conditions referencing other NdbQueryOperation's,&lt;/li&gt;&lt;li&gt;- parameterized/linked filters, these type of programs must be provided when building the NdbQuery-object.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The constant filters should be "easy" to integrate with ndbapi/mysqld, but the parameterized/linked is harder as we need to add new features to NdbScanFilter.&lt;br /&gt;&lt;br /&gt;Once this is integrated into mysqld, it will provide better performance for already pushable queries, see page 43 in my UC presentation (ref: filter).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;added support for NdbQueryOpertation's referencing non-direct parent NdbQueryOperation's. This should also be quite easy to integrate into ndbapi/mysqld. This will mean that new types of queries will become pushable.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;support for "to-many" joins is made so complete that it will get until we get an ndbapi for more elaborate testing. This will mean that lots of new queries will become pushable.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Note: all the additions has only been made inside ndb(mt)d so far, nothing new has (yet) been added to ndbapi/mysqld.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;And please provide &lt;a href="http://johanandersson.blogspot.com/2010/04/mysql-cluster-spj-preview-feedback_27.html"&gt;feedback&lt;/a&gt; on preview release that we made!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-8016363871943408027?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/8016363871943408027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=8016363871943408027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8016363871943408027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8016363871943408027'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2010/05/distributed-pushed-down-joins-more.html' title='distributed pushed down joins - more features'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-8615029615283774105</id><published>2010-04-24T21:38:00.003+02:00</published><updated>2010-04-24T21:48:30.212+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>distributed push down joins - first "to many" join</title><content type='html'>just managed to run the first "to-many" join inside the data-nodes.&lt;br /&gt;the query correspondce to&lt;br /&gt;&lt;br /&gt;SELECT t1.*, t2.*&lt;br /&gt;FROM T1 t1&lt;br /&gt;LEFT OUTER JOIN T1 as t2 on t2.pk &gt;= t1.b&lt;br /&gt;&lt;br /&gt;- the code inside the data-nodes is general...but incomplete (data-node later crashed)&lt;br /&gt;- there is no ndbapi and no SQL,the program testing is a hard-coded c-program sending messages using the ndb-cluster wire-protocol&lt;br /&gt;- the result-set is not managed (the c-program just hangs)&lt;br /&gt;- hopefully converting this into usable code will be faster than last years &lt;a href="http://jonasoreland.blogspot.com/2009/04/distributed-pushed-down-join.html"&gt;post&lt;/a&gt; as ndbapi is now quite complete, and this is "only" an add-on.&lt;br /&gt;&lt;br /&gt;for a bit more background look at my &lt;a href="http://assets.en.oreilly.com/1/event/36/MySQL%20Cluster%20and%20Pushdown-joins%20_In%20Pursuit%20of%20the%20Holy%20Grail_%20Presentation.pdf"&gt;presentation&lt;/a&gt; from MySQL Conference 2010.&lt;br /&gt;&lt;br /&gt;hard-core details:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;r.bn: 245 "DBTC", r.proc: 2, gsn: 32 "SCAN_TABREQ" prio: 1&lt;br /&gt;s.bn: 32768 "API", s.proc: 4, s.sigId: 0 length: 11 trace: 1 #sec: 2 fragInf: 0&lt;br /&gt; apiConnectPtr: H'00000027 requestInfo: H'08400a01:&lt;br /&gt;  Parallellism: 1 Batch: 64 LockMode: 0 Keyinfo: 0 Holdlock: 0 RangeScan: 0 Desc&lt;br /&gt;ending: 0 TupScan: 0&lt;br /&gt; ReadCommitted: 1 DistributionKeyFlag: 0 NoDisk: 1 spj: 1 attrLen: 0, keyLen: 0 &lt;br /&gt;tableId: 7, tableSchemaVer: 1&lt;br /&gt; transId(1, 2): (H'00000000, H'00000400) storedProcId: H'0000ffff&lt;br /&gt; batch_byte_size: 32768, first_batch_size: 64&lt;br /&gt; H'00000027 H'00000000 H'08400a01 H'00000007 H'00000001 H'0000ffff H'00000000&lt;br /&gt; H'00000400 H'00000026 H'00008000 H'00000040&lt;br /&gt;SECTION 0 type=generic size=1&lt;br /&gt; H'00000014&lt;br /&gt;SECTION 1 type=generic size=33&lt;br /&gt; H'000f0002 H'00050002 H'00000010 H'00000007 H'00000001 H'00010001 H'00090003&lt;br /&gt; H'00000003 H'00000008 H'00000001 H'00000001 H'00000003 H'00010001 H'00000002&lt;br /&gt; H'00060000 H'00080002 H'00000009 H'10000020 H'00000001 H'00000012 H'00000002&lt;br /&gt; H'fff00002 H'ffe90000 H'000a0003 H'00000009 H'ffff0100 H'10000024 H'00000001&lt;br /&gt; H'00000012 H'00000003 H'fff00002 H'ffe90000 H'fffb0000&lt;br /&gt;---- Received - Signal ----------------&lt;br /&gt;r.bn: 32768 "API", r.proc: 4, r.sigId: -1 gsn: 5 "TRANSID_AI" prio: 1&lt;br /&gt;s.bn: 249 "DBTUP", s.proc: 2, s.sigId: 166035 length: 3 trace: 1 #sec: 1 fragInf&lt;br /&gt;: 0&lt;br /&gt; H'10000020 H'00000000 H'00000400&lt;br /&gt;SECTION 0 type=linear size=7&lt;br /&gt; H'fff30004 H'00000003 H'00000001 H'00000002 H'ffe90008 H'00000014 H'00000000&lt;br /&gt;---- Received - Signal ----------------&lt;br /&gt;r.bn: 32768 "API", r.proc: 4, r.sigId: -1 gsn: 5 "TRANSID_AI" prio: 1&lt;br /&gt;s.bn: 249 "DBTUP", s.proc: 2, s.sigId: 166092 length: 3 trace: 1 #sec: 1 fragInf&lt;br /&gt;: 0&lt;br /&gt; H'10000020 H'00000000 H'00000400&lt;br /&gt;SECTION 0 type=linear size=7&lt;br /&gt; H'fff30004 H'00000003 H'00000002 H'00000003 H'ffe90008 H'00000014 H'00000001&lt;br /&gt;---- Received - Signal ----------------&lt;br /&gt;r.bn: 32768 "API", r.proc: 4, r.sigId: -1 gsn: 5 "TRANSID_AI" prio: 1&lt;br /&gt;s.bn: 249 "DBTUP", s.proc: 2, s.sigId: 166202 length: 3 trace: 1 #sec: 1 fragInf&lt;br /&gt;: 0&lt;br /&gt; H'10000024 H'00000000 H'00000400&lt;br /&gt;SECTION 0 type=linear size=9&lt;br /&gt; H'fff30004 H'00000003 H'00000001 H'00000002 H'ffe90008 H'00000014 H'00000000&lt;br /&gt; H'fffb0004 H'00000000&lt;br /&gt;---- Received - Signal ----------------&lt;br /&gt;r.bn: 32768 "API", r.proc: 4, r.sigId: -1 gsn: 5 "TRANSID_AI" prio: 1&lt;br /&gt;s.bn: 249 "DBTUP", s.proc: 2, s.sigId: 166203 length: 3 trace: 1 #sec: 1 fragInf&lt;br /&gt;: 0&lt;br /&gt; H'10000024 H'00000000 H'00000400&lt;br /&gt;SECTION 0 type=linear size=9&lt;br /&gt; H'fff30004 H'00000003 H'00000002 H'00000003 H'ffe90008 H'00000014 H'00000001&lt;br /&gt; H'fffb0004 H'00000000&lt;br /&gt;---- Received - Signal ----------------&lt;br /&gt;r.bn: 32768 "API", r.proc: 4, r.sigId: -1 gsn: 5 "TRANSID_AI" prio: 1&lt;br /&gt;s.bn: 249 "DBTUP", s.proc: 2, s.sigId: 166227 length: 3 trace: 1 #sec: 1 fragInf&lt;br /&gt;: 0&lt;br /&gt; H'10000024 H'00000000 H'00000400&lt;br /&gt;SECTION 0 type=linear size=9&lt;br /&gt; H'fff30004 H'00000003 H'00000001 H'00000002 H'ffe90008 H'00000014 H'00010002&lt;br /&gt; H'fffb0004 H'00000001&lt;br /&gt;---- Received - Signal ----------------&lt;br /&gt;r.bn: 32768 "API", r.proc: 4, r.sigId: -1 gsn: 5 "TRANSID_AI" prio: 1&lt;br /&gt;s.bn: 249 "DBTUP", s.proc: 2, s.sigId: 166234 length: 3 trace: 1 #sec: 1 fragInf&lt;br /&gt;: 0&lt;br /&gt; H'10000024 H'00000000 H'00000400&lt;br /&gt;SECTION 0 type=linear size=9&lt;br /&gt; H'fff30004 H'00000003 H'00000002 H'00000003 H'ffe90008 H'00000014 H'00010003&lt;br /&gt; H'fffb0004 H'00000001&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-8615029615283774105?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/8615029615283774105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=8615029615283774105' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8615029615283774105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8615029615283774105'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2010/04/distributed-push-down-joins-first-to.html' title='distributed push down joins - first &quot;to many&quot; join'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-650196536830438171</id><published>2010-04-15T03:13:00.006+02:00</published><updated>2010-04-15T03:55:40.039+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>uploaded cluster pushdown join presentation...and preview-release</title><content type='html'>presentation is &lt;a href="http://assets.en.oreilly.com/1/event/36/MySQL%20Cluster%20and%20Pushdown-joins%20_In%20Pursuit%20of%20the%20Holy%20Grail_%20Presentation.pdf"&gt;here&lt;/a&gt;&lt;br /&gt;src tarball, that do contain bugs if node-failure occurs, is &lt;a href="ftp://ftp.mysql.com/pub/mysql/download/cluster_telco/mysql-5.1.44-ndb-7.1.3-spj-preview/mysql-cluster-gpl-7.1.3-spj-preview.tar.gz"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;thanks for attending for those of you that did&lt;br /&gt;feedback on preview is welcome, e.g here&lt;br /&gt;&lt;br /&gt;maybe we'll do a binary version...if so i'll make a new post&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-650196536830438171?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/650196536830438171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=650196536830438171' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/650196536830438171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/650196536830438171'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2010/04/uploaded-cluster-pushdown-join.html' title='uploaded cluster pushdown join presentation...and preview-release'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-542729676327822358</id><published>2010-03-25T18:16:00.010+01:00</published><updated>2010-03-25T20:07:13.488+01:00</updated><title type='text'>fast IO and ndb</title><content type='html'>i read Marks &lt;a href="http://www.facebook.com/note.php?note_id=378043115932&amp;amp;_fb_noscript=1"&gt;blog entry&lt;/a&gt; about fast IO for PBXT, InnoDB (1.0.6 plugin) and MyISAM with some interest.&lt;br /&gt;&lt;br /&gt;then there was the &lt;a href="http://mysqlha.blogspot.com/2010/03/durable-not-durable-and-really-not.html"&gt;durable, not durable and really not durable blog&lt;/a&gt; in which Mark and &lt;a href="http://www.blogger.com/profile/03203602815866231586"&gt;LinuxJed&lt;/a&gt;&lt;a href="http://www.blogger.com/profile/03203602815866231586"&gt;i&lt;/a&gt; discussed cluster, and Mark wondered how much IO one could get from 1 data-node with ndb.&lt;br /&gt;&lt;br /&gt;so I decided to try.&lt;br /&gt;the setup is similar.&lt;br /&gt;ndb cluster using disk-tables, with a tablespace stored in /dev/shm.&lt;br /&gt;&lt;br /&gt;Data occupied 7.3G, which is slightly less than (some of) the others, this is as we don't support having columns with indexes stored on disk. I.e any column that has an index will be stored only in memory instead.&lt;br /&gt;&lt;br /&gt;ndb does however not support "handler" statements, so I used oltp-point-select-all-cols instead.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sysbench --test=oltp --mysql-host=foobar --mysql-user=root \&lt;br /&gt;--mysql-password=pw \&lt;br /&gt;--mysql-db=test \&lt;br /&gt;--oltp-table-size=40000000 \&lt;br /&gt;--max-time=60 --max-requests=0 \&lt;br /&gt;--mysql-table-engine=&lt;b&gt;ndb&lt;/b&gt; \&lt;br /&gt;--db-ps-mode=disable --mysql-engine-trx=yes \&lt;br /&gt;--oltp-read-only --oltp-skip-trx --oltp-test-mode=simple \&lt;br /&gt;--&lt;b&gt;oltp-point-select-all-cols&lt;/b&gt; \&lt;br /&gt;--oltp-dist-type=uniform \&lt;br /&gt;--oltp-range-size=1000 \&lt;br /&gt;--num-threads=1 --seed-rng=1 run&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F31z7Q6TpVA/S6ueiF9EHdI/AAAAAAAAAAc/tPB5gTAojkM/s1600/Screenshot-1.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_F31z7Q6TpVA/S6ueiF9EHdI/AAAAAAAAAAc/tPB5gTAojkM/s320/Screenshot-1.png" alt="" id="BLOGGER_PHOTO_ID_5452626082413157842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;results are not super great...&lt;br /&gt;so i did a ndbapi program (which is roughly the equivalent of handler-statements)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F31z7Q6TpVA/S6ufGCmtWsI/AAAAAAAAAAk/Y-bgSupxnVQ/s1600/Screenshot-2.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 122px;" src="http://3.bp.blogspot.com/_F31z7Q6TpVA/S6ufGCmtWsI/AAAAAAAAAAk/Y-bgSupxnVQ/s320/Screenshot-2.png" alt="" id="BLOGGER_PHOTO_ID_5452626699989375682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;these number look a bit better. but datanode (ndbmtd) was almost idle when running this...&lt;br /&gt;&lt;br /&gt;so i made another experiment. Instead of retrieving 1 row at a time (set@r = rand() % 40000000; select * from sbtest where id = @r) i changed to retrive 16 rows at a time (set @r1 = rand(); set @r2 = rand(); select * from sbtest where id in (@r1...@r16).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F31z7Q6TpVA/S6ugOOM1T6I/AAAAAAAAAAs/wAP7RLnXx_k/s1600/Screenshot-3.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 125px;" src="http://3.bp.blogspot.com/_F31z7Q6TpVA/S6ugOOM1T6I/AAAAAAAAAAs/wAP7RLnXx_k/s320/Screenshot-3.png" alt="" id="BLOGGER_PHOTO_ID_5452627940052651938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;i believe these results are relevant given that mark's aim was to test fast IO,&lt;br /&gt;and i think that this rewrite wont affect other SE as much as it does with ndb.&lt;br /&gt;and those numbers was quite ok.&lt;br /&gt;&lt;br /&gt;as an extra bonus, i also tried with using our memory tables (alter table sbtest storage memory), also with ndbapi and 16 rows at a time.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F31z7Q6TpVA/S6uhjiIfbqI/AAAAAAAAAA8/EBXkoeu0T60/s1600/Screenshot-4.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 126px;" src="http://3.bp.blogspot.com/_F31z7Q6TpVA/S6uhjiIfbqI/AAAAAAAAAA8/EBXkoeu0T60/s320/Screenshot-4.png" alt="" id="BLOGGER_PHOTO_ID_5452629405692030626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;these tests was executed on a 16-core machine Intel(R) Xeon(R) CPU E7420@2.13GHz&lt;br /&gt;and in my config.ini I had&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;DiskPageBufferMemory = 1GB&lt;br /&gt;DiskIOThreadPool=8&lt;br /&gt;FileSystemPath=/dev/shm&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;note: I first create tables in myisam, then converted them to ndb disk-tables by issuing "alter table sbtest storage disk tablespace TS engine = ndb" and all tests was using ndb-cluster-connection-pool=4&lt;br /&gt;&lt;br /&gt;all results:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SQL      2756   4998   7133   9130  10720  12222  13305  14190  14626  15287  15547  15955  16143  16334  16507  16757&lt;br /&gt;ndbapi   4177   7581  10319  13162  15245  17064  18874  20652  20850  24131  25976  24910  29832  30666  32625  34841&lt;br /&gt;b=16     1520  11374  35454  53396  55601  63248  71819  78468 103324  97330  97572 111099 125564 126790 133873 141588&lt;br /&gt;mm b=16 73004 128296 172207 207361 246907 270783 293753 312435 327006 345085 346924 374837 360747 372192 376887 394862&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-542729676327822358?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/542729676327822358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=542729676327822358' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/542729676327822358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/542729676327822358'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2010/03/fast-io-and-ndb.html' title='fast IO and ndb'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_F31z7Q6TpVA/S6ueiF9EHdI/AAAAAAAAAAc/tPB5gTAojkM/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-7050532408484476402</id><published>2010-03-15T15:07:00.007+01:00</published><updated>2010-03-15T16:06:36.384+01:00</updated><title type='text'>Dbspj update, teaser for UC</title><content type='html'>5 months more...&lt;br /&gt;&lt;br /&gt;reminder, what is Dbspj:&lt;br /&gt;- It's a new feature for MySQL Cluster&lt;br /&gt;- It gives the possibility to push-down SQL joins, i.e to evaluate the joins inside the data nodes.&lt;br /&gt;&lt;br /&gt;latest and greatest:&lt;br /&gt;- last 5 months spent on SQL integration&lt;br /&gt;- big effort having it used only for cases that we actually support&lt;br /&gt;- lots of testing using &lt;a href="http://forge.mysql.com/wiki/Random_Query_Generator"&gt;RQG&lt;/a&gt;&lt;br /&gt;- a significant part of bugs found last couple weeks, has &lt;b&gt;not&lt;/b&gt; been related to spj, but in fact "ordinary" optimizer bugs&lt;br /&gt;- we think that it's quite usable now.&lt;br /&gt;&lt;br /&gt;and the numbers:&lt;br /&gt;- my plan was to present TPC-W as "realistic" numbers&lt;br /&gt;- now they look more like fantastic numbers&lt;br /&gt;- if i could, i would add a "25x" to my title&lt;br /&gt;- visit my UC presentation (&lt;a href="http://en.oreilly.com/mysql2010/public/schedule/detail/12528"&gt;link&lt;/a&gt;) to learn more&lt;br /&gt;&lt;br /&gt;and fyi: we also plan to provide a feature preview source (or binary) release for &lt;a href="http://conferences.oreilly.com/mysql"&gt;&lt;br /&gt;&lt;img src="http://assets.en.oreilly.com/1/event/36/mysql2010_speaking_badge_210x60.gif" alt="O'Reilly MySQL Conference &amp;amp; Expo 2010" title="O'Reilly MySQL Conference &amp;amp; Expo 2010" height="60" width="210" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(i will of course also disclose all information provided in UC presentation after the event)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-7050532408484476402?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/7050532408484476402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=7050532408484476402' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7050532408484476402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7050532408484476402'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2010/03/dbspj-update-teaser-for-uc.html' title='Dbspj update, teaser for UC'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-5024923076180875617</id><published>2009-10-22T16:13:00.004+02:00</published><updated>2009-10-22T16:22:49.951+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Dbspj + mysqld, first trials</title><content type='html'>&lt;pre&gt;&lt;br /&gt;mysql&gt; create table T1 (a int, b int, primary key(a)) engine = ndb;&lt;br /&gt;mysql&gt; select x.a,x.b,z.a,z.b from T1 x, T1 y, T1 z where x.b=y.a and y.b=z.a;&lt;br /&gt;+----+------+----+------+&lt;br /&gt;| a  | b    | a  | b    |&lt;br /&gt;+----+------+----+------+&lt;br /&gt;| 31 |   47 | 63 |   31 |&lt;br /&gt;| 63 |   31 | 47 |   63 |&lt;br /&gt;| 47 |   63 | 31 |   47 |&lt;br /&gt;|  5 |   47 | 63 |   31 |&lt;br /&gt;+----+------+----+------+&lt;br /&gt;4 rows in set (0.01 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;- entire query is executed with one request to data nodes&lt;br /&gt;- code is only a hack (that bluntly examines mysqld's internal structures).&lt;br /&gt;- list of limitations is so long that i can't write it here due to bandwidth restrictions&lt;br /&gt;But still super cool!&lt;br /&gt;&lt;br /&gt;Quote from Jan, that implemented experiment: "You &lt;em&gt;can&lt;/em&gt; write queries that return correct result"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-5024923076180875617?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/5024923076180875617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=5024923076180875617' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/5024923076180875617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/5024923076180875617'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2009/10/dbspj-mysqld-first-trials.html' title='Dbspj + mysqld, first trials'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-4266599252927317320</id><published>2009-10-14T10:41:00.007+02:00</published><updated>2009-10-14T15:59:56.896+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Dbspj preliminary numbers</title><content type='html'>So some 5 month later...&lt;br /&gt;- Dbspj has an ndbapi&lt;br /&gt;- Dbspj works enough for simple benchmarks!&lt;br /&gt;&lt;br /&gt;Reminder, what is Dbspj:&lt;br /&gt;- It's a new feature for Ndb&lt;br /&gt;- It gives the possibility to push-down linked operations (e.g in SQL terminology: joins)&lt;br /&gt;- It currently only supports left-outer-joins, and only some kinds of joins&lt;br /&gt;- It is currently *not* in anyway integrated with mysqld (for accelerating SQL access)&lt;br /&gt;&lt;br /&gt;Anyway so here is the benchmark setup&lt;br /&gt;2 computers&lt;br /&gt;- ndbapi running on one&lt;br /&gt;- 2 datanodes running on other&lt;br /&gt;&lt;br /&gt;On images below:&lt;br /&gt;- red is new code, blue is corresponding "current" code&lt;br /&gt;- Y-axis is run-time, so lower is better&lt;br /&gt;- X-axis is "depth", i.e no of tables joined&lt;br /&gt;&lt;br /&gt;Note: this is debug-compiled, so the actually absolute numbers are&lt;br /&gt;not that interesting...rather the comparison...&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;Query 1:&lt;br /&gt;depth 1: select * from T t1, T t2 where T1.pk = constant and T2.pk = T1.pk&lt;br /&gt;depth 2: select * from T t1, T t2, T t3 where T1.pk = constant and T2.pk = T1.pk and T3.pk = T2.pk&lt;br /&gt;etc...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F31z7Q6TpVA/StWSQS4_EYI/AAAAAAAAAAM/UO5XTpG9Wcw/s1600-h/query1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://4.bp.blogspot.com/_F31z7Q6TpVA/StWSQS4_EYI/AAAAAAAAAAM/UO5XTpG9Wcw/s320/query1.png" alt="" id="BLOGGER_PHOTO_ID_5392376937492451714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;Query 2:&lt;br /&gt;depth 1: select * from T t1, T t2 where T2.pk = T1.pk&lt;br /&gt;depth 2: select * from T t1, T t2, T t3 where T2.pk = T1.pk and T3.pk = T2.pk&lt;br /&gt;etc...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F31z7Q6TpVA/StWSz-ESSdI/AAAAAAAAAAU/EdxaTzvzCps/s1600-h/query2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 236px;" src="http://1.bp.blogspot.com/_F31z7Q6TpVA/StWSz-ESSdI/AAAAAAAAAAU/EdxaTzvzCps/s320/query2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5392377550377994706" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-4266599252927317320?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/4266599252927317320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=4266599252927317320' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/4266599252927317320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/4266599252927317320'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2009/10/dbspj-preliminary-numbers.html' title='Dbspj preliminary numbers'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_F31z7Q6TpVA/StWSQS4_EYI/AAAAAAAAAAM/UO5XTpG9Wcw/s72-c/query1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-6665736337970039528</id><published>2009-05-06T12:05:00.004+02:00</published><updated>2009-05-06T12:15:31.941+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>ArenaAllocator complete (Dbspj)</title><content type='html'>and i created a new DataBuffer2, which has pool-type as template argument.&lt;br /&gt;it was "impossible" to alter DataBuffer to do this...it was simply to hard-wired to ArrayPool. too bad.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;so now everything in Dbspj can/will be using the ArenaAllocator...&lt;br /&gt;rationale for ArenaAllocator is really not to have a "quick" release (the code still releases each object individually...to reset magic values) but that it's a kind of variable length allocation strategy that provide great locality of data...&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;also pushed infrastructure for "result-set correlation".&lt;br /&gt;Dbspj will (at least for now) when joining only return rows once so in the case of a 2-way join, a SQL result set will return the rows from the first table one time *for each* match in second table.&lt;br /&gt;Dbspj will not...(but ha_ndbcluster will have to do this...when presenting things for mysqld) and since it will not, there has to be a way to correlate rows from the 2 tables.&lt;br /&gt;this we call "result-set correlation".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-6665736337970039528?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/6665736337970039528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=6665736337970039528' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/6665736337970039528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/6665736337970039528'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2009/05/arenaallocator-complete-dbspj.html' title='ArenaAllocator complete (Dbspj)'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-2026300722067265130</id><published>2009-05-02T11:00:00.003+02:00</published><updated>2009-05-02T11:16:38.778+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>memory allocation in ndb(mt)d</title><content type='html'>inside the data nodes a number of different techniques for allocating memory is used.&lt;br /&gt;there are 2 main variants&lt;br /&gt;- page allocations&lt;br /&gt;- object allocations (e.i slab allocator)&lt;br /&gt;&lt;br /&gt;and for the object allocations there are a number of different variants&lt;br /&gt;- RWPool, "ordinary" slab, only objects of same type on 1 page, free-list per page and object&lt;br /&gt;- WOPool, allocations which are short-lived, no free-list just ref-count&lt;br /&gt;- ArrayPool, fixed array of packed object&lt;br /&gt;&lt;br /&gt;and I'm just now introducing a ArenaAllocator (which will be used for spj)&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;- RWPool, WOPool and ArenaAllocator/Pool are "new", meaning that they are build from start with support for more dynamic memory handling in mind.&lt;br /&gt;- ArrayPool is very fixed, and exists both in the structured form, and various hard-coded variants.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;one thing in common for all the "new" allocators is that they use magic numbers per object, so that every time a pointer (once per signal) that validity of the object is checked, and a trap is generated on a invalid memory access.&lt;br /&gt;&lt;br /&gt;another thing in common is that they are all used by 1 thread at a time, and only pages are allocated/freed to a global free-list.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;- to support variable length data, linked list of fixed size objects are used (DataBuffer)&lt;br /&gt;- for input data (from e.g sockets) a special DataBuffer with additional thread-safety code is used so that data can be passed between threads wo/ copying.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;but there is no malloc/free new/delete :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-2026300722067265130?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/2026300722067265130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=2026300722067265130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/2026300722067265130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/2026300722067265130'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2009/05/memory-allocation-in-ndbmtd.html' title='memory allocation in ndb(mt)d'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-7539245094614098140</id><published>2009-05-01T12:38:00.003+02:00</published><updated>2009-05-01T14:34:56.475+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>distributed pushed-down join - part II</title><content type='html'>now also support table/index scan as root node, i.e tree = [ scan ] ? [ lookup ] *&lt;br /&gt;still with the limitations:&lt;br /&gt;- a child may only be dependent on immediate parent&lt;br /&gt;- still only left outer join.&lt;br /&gt;&lt;br /&gt;i also completed the parameterized scan-filter inside tup but does not yet support this in spj or ndbapi.&lt;br /&gt;&lt;br /&gt;currently working on&lt;br /&gt;- the parameterized scan-filer in spj (and a tiny bit in the ndbapi).&lt;br /&gt;- result set correlation&lt;br /&gt;&lt;br /&gt;currently thinking on&lt;br /&gt;- arena based allocator for spj-requests, (compare mysqld mem-root concept)&lt;br /&gt;&lt;br /&gt;discussed with frazer what spj "really is", concluded that it probably is some kind of "data-flow-engine"...should probably find some hip acronym/term for it...&lt;br /&gt;&lt;br /&gt;note:&lt;br /&gt;current mental capacity is limiting spj to only one scan in a tree.&lt;br /&gt;this limitation can of course be lifted...but not now, or my brain will fry.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;wonder how i should make people giving me votes on planetmysql??&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-7539245094614098140?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/7539245094614098140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=7539245094614098140' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7539245094614098140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7539245094614098140'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2009/05/distributed-pushed-down-join-part-ii.html' title='distributed pushed-down join - part II'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-5430810740757038254</id><published>2009-04-23T01:55:00.005+02:00</published><updated>2009-04-23T02:39:55.101+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>distributed pushed-down join</title><content type='html'>just managed to run the first join inside the data-nodes.&lt;br /&gt;the query correspondce to&lt;br /&gt;&lt;br /&gt;SELECT t1.*, t2.*&lt;br /&gt;FROM T1 t1&lt;br /&gt;LEFT OUTER JOIN T1 t2 on t1.pk = t2.pk&lt;br /&gt;WHERE t1.pk = avalue&lt;br /&gt;&lt;br /&gt;- the code inside the data-nodes is general...but incomplete (e.g leaks memory, doesnt handle error correctly...)&lt;br /&gt;- there is no ndbapi and no SQL,the program testing is a hard-coded c-program sending messages using the ndb-cluster wire-protocol&lt;br /&gt;- the result-set is not managed (the c-program just hangs)&lt;br /&gt;&lt;br /&gt;Summary:&lt;br /&gt;- there is *many* things left to do, when this will actually hit a release is very uncertain (or if it ever will...)&lt;br /&gt;- this is the coolest thing i implemented in a long long time&lt;br /&gt;&lt;br /&gt;Details:&lt;br /&gt;- the code is written so that the query and the parameters are sent separately so that we in the future could have the queries permanently stored in the data nodes.&lt;br /&gt;- the query is:&lt;br /&gt;SELECT t1.?1, t2.?2&lt;br /&gt;FROM T1 t1&lt;br /&gt;LEFT OUTER JOIN T1 t2 on t1.pk = t2.pk&lt;br /&gt;WHERE t1.pk = ?3&lt;br /&gt;i.e both values and projection is parameterized&lt;br /&gt;&lt;br /&gt;- the serialized form of this request is 44bytes query and 32 byte parameters&lt;br /&gt;- i could do a N-way (key-lookup) join with aribitrary tables and join-conditions using the code inside the data-node&lt;br /&gt;- code *only* supports left-outer-joins and only lookups&lt;br /&gt;- next step is doing scan+lookup&lt;br /&gt;&lt;br /&gt;Hard-core details:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sh&gt; cat mysql-cluster/ndb_1.out.log&lt;br /&gt;DBSPJ: ::build()&lt;br /&gt;DBSPJ:  - loop 0 pos: 1&lt;br /&gt;DBSPJ: getOpInfo(1)&lt;br /&gt;DBSPJ: createNode - seize -&gt; ptrI: 57344&lt;br /&gt;DBSPJ: lookup_build: len=5&lt;br /&gt;DBSPJ: attrCnt: 1 -&gt; len: 0&lt;br /&gt;DBSPJ: param len: 4&lt;br /&gt;DBSPJ: attrCnt: 1&lt;br /&gt;DBSPJ:  - loop 1 pos: 6&lt;br /&gt;DBSPJ: getOpInfo(1)&lt;br /&gt;DBSPJ: createNode - seize -&gt; ptrI: 57376&lt;br /&gt;DBSPJ: lookup_build: len=5&lt;br /&gt;DBSPJ: attrCnt: 1 -&gt; len: 0&lt;br /&gt;DBSPJ: added 57376 as child of 57344&lt;br /&gt;DBSPJ: param len: 4&lt;br /&gt;DBSPJ: attrCnt: 1&lt;br /&gt;LQHKEYREQ to 6f70002&lt;br /&gt;ClientPtr = H'0000e000 hashValue = H'87c3aa01 tcBlockRef = H'01080002&lt;br /&gt;transId1 = H'00000000 transId2 = H'00000301 savePointId = H'00000000&lt;br /&gt;Op: 0 Lock: 0 Flags: Simple Dirty NoDisk ScanInfo/noFiredTriggers: H'0&lt;br /&gt;AttrLen: 0 (0 in this) KeyLen: 0 TableId: 4 SchemaVer: 1&lt;br /&gt;FragId: 0 ReplicaNo: 0 LastReplica: 0 NextNodeId: 0&lt;br /&gt;ApiRef: H'80000003 ApiOpRef: H'00000008&lt;br /&gt;AttrInfo:&lt;br /&gt;KEYINFO: ptr.i = 7(0xac3ee800) ptr.sz = 1(1)&lt;br /&gt;H'0x00000000&lt;br /&gt;ATTRINFO: ptr.i = 8(0xac3ee900) ptr.sz = 5(5)&lt;br /&gt;H'0x00000000 H'0xffee0000 H'0x01080002 H'0x0000e000 H'0xfff00005&lt;br /&gt;DBSPJ: execTRANSID_AI&lt;br /&gt;execTRANSID_AI: ptr.i = 3(0xac3ee400) ptr.sz = 2(2)&lt;br /&gt;H'0x00000004 H'0x00000000&lt;br /&gt;LQHKEYREQ to 6f70002&lt;br /&gt;ClientPtr = H'0000e020 hashValue = H'87c3aa01 tcBlockRef = H'01080002&lt;br /&gt;transId1 = H'00000000 transId2 = H'00000301 savePointId = H'00000000&lt;br /&gt;Op: 0 Lock: 0 Flags: Simple Dirty ScanInfo/noFiredTriggers: H'0&lt;br /&gt;AttrLen: 0 (0 in this) KeyLen: 0 TableId: 4 SchemaVer: 1&lt;br /&gt;FragId: 0 ReplicaNo: 0 LastReplica: 0 NextNodeId: 0&lt;br /&gt;ApiRef: H'80000003 ApiOpRef: H'00000008&lt;br /&gt;AttrInfo:&lt;br /&gt;KEYINFO: ptr.i = 8(0xac3ee900) ptr.sz = 1(1)&lt;br /&gt;H'0x00000000&lt;br /&gt;ATTRINFO: ptr.i = 9(0xac3eea00) ptr.sz = 1(1)&lt;br /&gt;H'0xfff00005&lt;br /&gt;&lt;br /&gt;sh&gt; cat api-signal-log.txt&lt;br /&gt;---- Send ----- Signal ----------------&lt;br /&gt;r.bn: 245 "DBTC", r.proc: 2, gsn: 12 "TCKEYREQ" prio: 1&lt;br /&gt;s.bn: 32768 "API", s.proc: 3, s.sigId: 0 length: 8 trace: 1 #sec: 2 fragInf: 0&lt;br /&gt;apiConnectPtr: H'00000020, apiOperationPtr: H'00000008&lt;br /&gt;Operation: Read, Flags: Dirty Start Execute NoDisk IgnoreError Simple  spj&lt;br /&gt;keyLen: 0, attrLen: 0, AI in this: 0, tableId: 4, tableSchemaVer: 1, API Ver: 5&lt;br /&gt;transId(1, 2): (H'00000000, H'00000300)&lt;br /&gt;-- Variable Data --&lt;br /&gt;SECTION 0 type=generic size=1&lt;br /&gt;H'00000000&lt;br /&gt;SECTION 1 type=generic size=19&lt;br /&gt;H'000b0002 H'00050001 H'00000000 H'00000004 H'00000001 H'00000001 H'00050001&lt;br /&gt;H'00000001 H'00000004 H'00000001 H'00000001 H'00040001 H'00000000 H'00000008&lt;br /&gt;H'fff00005 H'00040001 H'00000000 H'00000008 H'fff00005&lt;br /&gt;---- Received - Signal ----------------&lt;br /&gt;r.bn: 2047 "API", r.proc: 3, r.sigId: -1 gsn: 10 "TCKEYCONF" prio: 1&lt;br /&gt;s.bn: 245 "DBTC", s.proc: 2, s.sigId: 241503 length: 9 trace: 1 #sec: 0 fragInf:&lt;br /&gt;0&lt;br /&gt;H'80000005 H'00000000 H'00000000 H'00000001 H'00000000 H'00000300 H'00000008&lt;br /&gt;H'80000002 H'00000000&lt;br /&gt;---- Received - Signal ----------------&lt;br /&gt;r.bn: 2047 "API", r.proc: 3, r.sigId: -1 gsn: 5 "TRANSID_AI" prio: 1&lt;br /&gt;s.bn: 249 "DBTUP", s.proc: 2, s.sigId: 241503 length: 22 trace: 1 #sec: 0 fragIn&lt;br /&gt;f: 0&lt;br /&gt;H'80000007 H'00000008 H'00000000 H'00000301 H'fff30004 H'0000001f H'00000000&lt;br /&gt;H'00000005 H'ef76733c H'deece672 H'ffffffff H'80000007 H'00000008 H'00000000&lt;br /&gt;H'00000301 H'fff30004 H'0000001f H'00000000 H'00000005 H'ef76733c H'deece672&lt;br /&gt;H'ffffffff&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-5430810740757038254?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/5430810740757038254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=5430810740757038254' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/5430810740757038254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/5430810740757038254'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2009/04/distributed-pushed-down-join.html' title='distributed pushed-down join'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-6807836023815734152</id><published>2009-04-12T21:55:00.007+02:00</published><updated>2009-04-12T22:58:25.507+02:00</updated><title type='text'>mutex micro benchmark</title><content type='html'>when working on mutex contention for ndbapi (mysql-cluster)&lt;br /&gt;i decided to do some micro benchmarks.&lt;br /&gt;&lt;br /&gt;The benchmark is threads that locks/unlocks an private mutex&lt;br /&gt;and increment a counter.&lt;br /&gt;&lt;br /&gt;The tests are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;mutex_aligned, pthread_mutex, lock/unlock, each mutex in separate cache-line&lt;/li&gt;&lt;li&gt;mutex_non_aligned, same as above but mutexes are packed together hence sharing cache-lines&lt;/li&gt;&lt;li&gt;spin_aligned, home-made spinlock (only x86), each spinlock in separate cache-line, the spinlock is an atomic operation for lock, and a full-barrier+assign for unlock&lt;/li&gt;&lt;li&gt;spin_non_aligned, same as above but spinlocks are packed together hence sharing cache-lines&lt;/li&gt;&lt;li&gt;lock_xadd, atomic-inc, (on sparc impl. using atomic.h, which uses cas i think)&lt;/li&gt;&lt;li&gt;xadd, (only x86), the non-smp (but irq) safe add variant for x86&lt;/li&gt;&lt;li&gt;gcc_sync_fetch_and_add, gcc intrinsic for atomic add&lt;/li&gt;&lt;li&gt;add_mb, "normal" add (on volatile variable) followed by a full-barrier&lt;/li&gt;&lt;li&gt;add, "normal" add (on volatile variable)&lt;/li&gt;&lt;li&gt;nop, a nop, just to see that thread start/stop does not affect test outcome noticable&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;The conclusions are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;atomic operations are very expensive&lt;/li&gt;&lt;li&gt;false sharing is a true disaster&lt;/li&gt;&lt;li&gt;it might be worth the effort to impl. both spinlocks and atomic-inc for sparc&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Sorry for lousy html formatting :(&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;table border="1" cellpadding="1" cellspacing="1"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="7" align="center"&gt;&lt;span style="font-size:78%;"&gt;Intel(R) Core(TM)2 Quad CPU Q6600@2.40GHz (1-socket 4-cores)&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/th&gt;&lt;th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/th&gt;&lt;th colspan="7" align="center"&gt;&lt;span style="font-size:78%;"&gt;mops vs threads&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;op&lt;/span&gt;&lt;/th&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;ns/op&lt;/span&gt;&lt;/th&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;1&lt;/span&gt;&lt;/th&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;2&lt;/span&gt;&lt;/th&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;3&lt;/span&gt;&lt;/th&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;4&lt;/span&gt;&lt;/th&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;5&lt;/span&gt;&lt;/th&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;6&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;7&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;mutex_align&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;42&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;23&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;44&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;66&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;88&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;78&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;79&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;89&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;mutex_non_align&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;42&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;23&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;7&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;10&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;8&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;19&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;18&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;22&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;spin_align&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;16&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;60&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;121&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;182&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;234&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;184&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;196&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;212&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;spin_non_align&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;16&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;60&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;16&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;24&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;32&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;39&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;40&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;57&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;lock_xadd&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;8&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;117&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;235&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;352&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;470&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;357&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;352&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;411&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;xadd&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;342&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;684&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1026&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1368&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;855&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1026&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1196&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;gcc_sync_fetch_and_add&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;8&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;119&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;239&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;359&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;479&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;371&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;359&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;419&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;add_mb&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;5&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;171&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;342&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;513&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;684&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;455&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;513&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;598&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;add&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;398&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;797&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1195&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1594&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;996&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1196&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1394&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;nop&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;0&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;6357142&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2870967&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2870967&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2119047&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1390625&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;898989&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;687258&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;table border="1"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="14" align="center"&gt;&lt;span style="font-size:78%;"&gt;2 x Intel(R) Xeon(R) CPU X5355  @2.66GHz (2-socket 4 cores each)&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th colspan="14" align="center"&gt;&lt;span style="font-size:78%;"&gt;mops vs threads&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;op&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;ns/op&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;1&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;2&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;3&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;4&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;5&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;6&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;7&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;8&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;9&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;10&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;11&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;12&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;13&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;14&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;mutex_align&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;43&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;22&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;42&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;63&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;84&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;105&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;126&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;145&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;162&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;126&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;134&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;132&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;141&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;139&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;155&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;mutex_non_align&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;43&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;22&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;10&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;15&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;18&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;18&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;22&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;29&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;27&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;27&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;33&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;36&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;44&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;49&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;57&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;spin_align&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;17&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;56&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;112&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;166&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;210&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;275&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;292&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;273&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;260&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;318&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;270&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;345&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;312&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;354&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;346&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;spin_non_align&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;17&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;56&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;17&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;36&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;38&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;51&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;49&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;50&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;55&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;72&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;91&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;93&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;123&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;87&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;120&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;lock_xadd&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;10&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;98&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;195&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;289&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;377&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;467&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;513&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;504&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;504&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;442&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;420&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;525&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;512&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;582&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;605&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;xadd&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;380&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;742&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1060&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1189&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1490&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1610&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1829&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1350&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1687&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1760&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1954&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1714&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1425&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2006&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;gcc_sync_fetch_and_add&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;10&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;98&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;195&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;287&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;375&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;466&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;560&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;488&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;680&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;523&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;583&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;556&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;622&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;587&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;597&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;add_mb&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;7&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;126&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;252&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;369&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;479&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;587&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;589&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;770&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;719&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;598&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;650&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;639&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;686&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;649&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;602&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;add&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;443&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;861&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;974&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1393&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1775&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1807&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1904&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1740&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1986&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2139&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1679&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1555&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2307&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2116&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;nop&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;0&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;4114457&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;3283653&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;2355172&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1366000&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;903439&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;803529&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;617540&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;640712&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;532761&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;466530&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;410950&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;382418&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;351699&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;320356&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;table border="1"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="16" align="center"&gt;&lt;span style="font-size:78%;"&gt;SUNW,T5240, 2*(HT-64) 1415MHz SUNW,UltraSPARC-T2+ (2-socket 8-cores each, 8 threads/core)&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th colspan="16" align="center"&gt;&lt;span style="font-size:78%;"&gt;mops vs threads&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;op&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;ns/op&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;1&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;9&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;17&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;25&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;33&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;41&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;49&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;57&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;65&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;73&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;81&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;89&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;97&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;105&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;113&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;th align="right"&gt;&lt;span style="font-size:78%;"&gt;121&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;mutex_align&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;299&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;3&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;29&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;55&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;78&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;98&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;115&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;132&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;141&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;153&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;161&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;179&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;181&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;191&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;200&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;208&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;209&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;mutex_non_align&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;299&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;3&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;7&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;13&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;22&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;29&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;37&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;44&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;51&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;57&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;63&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;68&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;73&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;78&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;83&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;88&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;92&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;lock_xadd&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;70&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;14&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;125&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;232&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;326&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;408&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;472&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;506&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;538&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;536&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;520&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;512&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;503&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;499&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;492&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;487&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;477&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;add_mb&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;34&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;28&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;258&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;469&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;637&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;759&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;853&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;909&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;937&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;947&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;926&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;915&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;897&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;881&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;893&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;892&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;870&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;add&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;13&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;74&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;637&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1020&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1257&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1398&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1412&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1356&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1295&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1222&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1247&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1273&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1246&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1265&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1272&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1286&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;1287&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;tr&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;nop&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;0&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;184331&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;46367&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;24849&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;17520&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;12893&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;10676&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;9051&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;7616&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;6697&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;6196&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;5492&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;4960&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;4069&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;3739&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;3486&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;td align="right"&gt;&lt;span style="font-size:78%;"&gt;3289&lt;/span&gt;&lt;/td&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-6807836023815734152?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/6807836023815734152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=6807836023815734152' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/6807836023815734152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/6807836023815734152'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2009/04/mutex-micro-benchmark.html' title='mutex micro benchmark'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-3759778690129327051</id><published>2009-04-09T13:57:00.000+02:00</published><updated>2009-04-09T13:58:19.642+02:00</updated><title type='text'>bugs and more bugs</title><content type='html'>have i worked on so far this year...&lt;br /&gt;but 7.0 is soon to be released...and &lt;br /&gt;things are starting to look reasonable&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-3759778690129327051?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/3759778690129327051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=3759778690129327051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/3759778690129327051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/3759778690129327051'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2009/04/bugs-and-more-bugs.html' title='bugs and more bugs'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-215542544591441140</id><published>2009-01-13T11:53:00.003+01:00</published><updated>2009-01-13T12:04:15.896+01:00</updated><title type='text'>api-thread-contention TODOs</title><content type='html'>currently working on a refactoring ndbapi for mysql-cluster, in order to decrease &lt;br /&gt;mutex contention allowing to better utilize many threads on multi-core machines.&lt;br /&gt;while doing so, i implement a "vanilla" ndbapi-backend which lacks features&lt;br /&gt;current in there.&lt;br /&gt;&lt;br /&gt;once this is working, i'll start adding optimizations...&lt;br /&gt;&lt;br /&gt;reintroduce:&lt;br /&gt;- zero copy receive&lt;br /&gt;- optimizations for single threaded performance (less ctx switches)&lt;br /&gt;&lt;br /&gt;introduce:&lt;br /&gt;- split mutex(es)&lt;br /&gt;- zero copy send (or actually 1-copy instead of 2, but zero sounds better)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-215542544591441140?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/215542544591441140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=215542544591441140' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/215542544591441140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/215542544591441140'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2009/01/api-thread-contention-todos.html' title='api-thread-contention TODOs'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-7629788476958278692</id><published>2008-12-05T19:24:00.002+01:00</published><updated>2008-12-05T19:32:32.172+01:00</updated><title type='text'>shortstat</title><content type='html'>i ran some simple stats on mysql releases&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;*** mysql-4.1..mysql-5.0&lt;br /&gt;commits: 7790&lt;br /&gt;diffstat: 4424 files changed, 1271855 insertions(+), 199555 deletions(-)&lt;br /&gt; /sql      255 files changed,  129725 insertions(+),  41964 deletions(-)&lt;br /&gt; /test    1509 files changed,  954053 insertions(+),  15940 deletions(-)&lt;br /&gt;&lt;br /&gt;*** mysql-5.0..mysql-5.1&lt;br /&gt;commits: 6411&lt;br /&gt;diffstat: 10244 files changed, 2172077 insertions(+), 1349098 deletions(-)&lt;br /&gt; /sql       243 files changed,  151483 insertions(+),   69799 deletions(-)&lt;br /&gt; /test     3862 files changed, 1258333 insertions(+),  206729 deletions(-)&lt;br /&gt;&lt;br /&gt;*** mysql-5.1..mysql-6.0&lt;br /&gt;commits: 3546&lt;br /&gt;diffstat: 3574 files changed, 679669 insertions(+), 82131 deletions(-)&lt;br /&gt; /sql      226 files changed,  63619 insertions(+), 16469 deletions(-)&lt;br /&gt; /test    1772 files changed, 292884 insertions(+), 33553 deletions(-)&lt;br /&gt; /storage 1184 files changed, 281298 insertions(+),  9179 deletions(-)&lt;br /&gt;&lt;br /&gt;*** mysql-5.1..mysql-5.1-telco-6.2&lt;br /&gt;commits: 761&lt;br /&gt;diffstat: 841 files changed, 75105 insertions(+), 37063 deletions(-)&lt;br /&gt; /sql      72 files changed,  8673 insertions(+),  5544 deletions(-)&lt;br /&gt; /test    326 files changed, 12269 insertions(+), 18376 deletions(-)&lt;br /&gt; /storage 396 files changed, 52983 insertions(+), 12434 deletions(-)&lt;br /&gt;&lt;br /&gt;*** mysql-5.1-telco-6.2..mysql-5.1-telco-6.3&lt;br /&gt;commits: 347&lt;br /&gt;diffstat:  455 files changed, 27372 insertions(+), 10033 deletions(-)&lt;br /&gt; /sql       39 files changed,  3471 insertions(+),   740 deletions(-)&lt;br /&gt; /test     215 files changed,  8735 insertions(+),  2251 deletions(-)&lt;br /&gt; /storage  182 files changed, 14990 insertions(+),  7031 deletions(-)&lt;br /&gt;&lt;br /&gt;*** mysql-5.1-telco-6.3..mysql-5.1-telco-6.4&lt;br /&gt;commits: 582&lt;br /&gt;diffstat: 733 files changed, 73161 insertions(+), 30912 deletions(-)&lt;br /&gt; /sql      12 files changed,   472 insertions(+),   250 deletions(-)&lt;br /&gt; /test     48 files changed,  1151 insertions(+),   218 deletions(-)&lt;br /&gt; /storage 622 files changed, 70267 insertions(+), 30010 deletions(-)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;--- conclusions&lt;br /&gt;&lt;br /&gt;none&lt;br /&gt;&lt;br /&gt;--- how to get git copy of mysql repository&lt;br /&gt;&lt;br /&gt;git-clone git://ndb.mysql.com/mysql.git&lt;br /&gt;&lt;br /&gt;--- script that produces stats&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;R="mysql-4.1..mysql-5.0 mysql-5.0..mysql-5.1 mysql-5.1..mysql-6.0 mysql-5.1..mysql-5.1-telco-6.2 mysql-5.1-telco-6.2..mysql-5.1-t&lt;br /&gt;elco-6.3 mysql-5.1-telco-6.3..mysql-5.1-telco-6.4"&lt;br /&gt;&lt;br /&gt;for i in $R&lt;br /&gt;do&lt;br /&gt;        echo "*** $i"&lt;br /&gt;        echo "commits: `git-log --no-merges $i | grep Author | wc -l`"&lt;br /&gt;        echo "diffstat: `git-diff --shortstat $i`"&lt;br /&gt;        echo " /sql     `git-diff --shortstat $i -- sql/`"&lt;br /&gt;        echo " /test    `git-diff --shortstat $i -- mysql-test/`"&lt;br /&gt;        if [ -z "`echo $i | grep mysql-5.0`" ]&lt;br /&gt;        then&lt;br /&gt;        echo " /storage `git-diff --shortstat $i -- storage/`"&lt;br /&gt;        fi&lt;br /&gt;        echo&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-7629788476958278692?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/7629788476958278692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=7629788476958278692' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7629788476958278692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7629788476958278692'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/12/shortstat.html' title='shortstat'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-849393108004380714</id><published>2008-11-25T13:10:00.000+01:00</published><updated>2008-11-25T13:08:21.376+01:00</updated><title type='text'>950k reads per second on 1 datanode</title><content type='html'>i spent last night adding 75% of the next step for our multi-threaded datanode.&lt;br /&gt;and got new numbers...&lt;br /&gt;the config is the same as earlier post, with the exception that&lt;br /&gt;MaxNoOfExecutionThreads=8&lt;br /&gt;&lt;br /&gt;flexAsynch -ndbrecord -temp -con 4 -t 16 -p 312 -a 2 -l 3 -r 2&lt;br /&gt;insert average: 461584/s min: 451928/s max: 474254/s stddev: 2%&lt;br /&gt;update average: 533083/s min: 530950/s max: 537351/s stddev: 0%&lt;br /&gt;delete average: 564388/s min: 559265/s max: 567143/s stddev: 0%&lt;br /&gt;read   average: 948954/s min: 937288/s max: 959262/s stddev: 0%&lt;br /&gt;&lt;br /&gt;also tried using SCI instead of gigabit ethernet&lt;br /&gt;flexAsynch -ndbrecord -temp -con 4 -t 16 -p 256 -a 2 -l 3 -r 2&lt;br /&gt;insert average: 568012/s min: 550389/s max: 578367/s stddev: 2%&lt;br /&gt;update average: 599828/s min: 598480/s max: 602175/s stddev: 0%&lt;br /&gt;delete average: 614036/s min: 612440/s max: 616496/s stddev: 0%&lt;br /&gt;read   average: 1012472/s min: 1003429/s max: 1024000/s stddev: 0%&lt;br /&gt;&lt;br /&gt;i.e with SCI the 1M reads/sec limit is reached! (on 1 datanode)&lt;br /&gt;    i think this should also be achievable on ethernet by adding some&lt;br /&gt;    more optimizations (let api-application start transactions directly&lt;br /&gt;    on correct TC-thread)&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;comments:&lt;br /&gt;1) the new "feature" is multi threading the transaction coordinator&lt;br /&gt;   aka MT-TC&lt;br /&gt;&lt;br /&gt;2) this part will likely not make the mysql cluster 6.4.0-release&lt;br /&gt;&lt;br /&gt;3) our multi-threading architecture seems promising,&lt;br /&gt;   in less than a month i managed to double the throughput&lt;br /&gt;   (in a admittedly unrealistic benchmark, but still)&lt;br /&gt;&lt;br /&gt;4) the 25% missing from the current patch is node-failure handling&lt;br /&gt;   and a "rcu-like" lock which will be used for reading/updating distribution&lt;br /&gt;   (it's read for each operation, and updated during node-failure,node-recovery and&lt;br /&gt;    online table repartitioning)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-849393108004380714?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/849393108004380714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=849393108004380714' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/849393108004380714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/849393108004380714'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/11/950k-reads-per-second-on-1-datanode.html' title='950k reads per second on 1 datanode'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-3014660615511830173</id><published>2008-11-05T09:55:00.000+01:00</published><updated>2008-11-05T09:51:01.643+01:00</updated><title type='text'>700k reads per second on 1 datanode</title><content type='html'>added multi connect to flexAsynch, got new numbers&lt;br /&gt;everything else same as previous post&lt;br /&gt;&lt;br /&gt;[jonas@n1 run]$ flexAsynch -ndbrecord -temp -con 2 -t 16 -p 512 -l 3 -a 2 -r 2&lt;br /&gt;insert average: 360679/s min: 346150/s max: 370075/s stddev: 2%&lt;br /&gt;update average: 373349/s min: 372465/s max: 374132/s stddev: 0%&lt;br /&gt;delete average: 371014/s min: 357043/s max: 378523/s stddev: 2%&lt;br /&gt;read   average: 731042/s min: 702211/s max: 760631/s stddev: 2%&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-3014660615511830173?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/3014660615511830173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=3014660615511830173' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/3014660615511830173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/3014660615511830173'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/11/700k-reads-per-second-on-1-datanode.html' title='700k reads per second on 1 datanode'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-3994150035274990147</id><published>2008-11-03T15:20:00.002+01:00</published><updated>2008-11-03T15:33:14.312+01:00</updated><title type='text'>500k reads per second on 1 datanode</title><content type='html'>just did some benchmarking on multi-threaded ndbd (binary called ndbmtd) &lt;br /&gt;that is in the coming 6.4 release.&lt;br /&gt;&lt;br /&gt;quite happy with results&lt;br /&gt;&lt;br /&gt;--- results&lt;br /&gt;&lt;br /&gt;[jonas@n1 run]$ flexAsynch -ndbrecord -temp -t 8 -p 512 -r 5 -a 2&lt;br /&gt;insert average: 374200/s min: 374200/s max: 374200/s stddev: 0%&lt;br /&gt;update average: 370947/s min: 370947/s max: 370947/s stddev: 0%&lt;br /&gt;delete average: 395061/s min: 395061/s max: 395061/s stddev: 0%&lt;br /&gt;read   average: 537178/s min: 531948/s max: 543092/s stddev: 0%&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;this flexAsynch command will run with&lt;br /&gt;- 8 threads&lt;br /&gt;- 512 parallel transactions per thread&lt;br /&gt;- 8 byte records.&lt;br /&gt;&lt;br /&gt;note: during the reads, the datanode was *not* maxed out.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;this was run on two identical computers, &lt;br /&gt;2-socket, 4 cores per socket Intel(R) Xeon(R) CPU X5355 @ 2.66GHz&lt;br /&gt;&lt;br /&gt;api-program was running on computer 1 (n1)&lt;br /&gt;datanode was running on computer 2 (n2)&lt;br /&gt;&lt;br /&gt;--- configuration&lt;br /&gt;&lt;br /&gt;[cluster_config]&lt;br /&gt;DataMemory=2000M&lt;br /&gt;IndexMemory=150M&lt;br /&gt;&lt;br /&gt;SendBufferMemory=8M&lt;br /&gt;ReceiveBufferMemory=8M&lt;br /&gt;LongMessageBuffer=64M&lt;br /&gt;&lt;br /&gt;NoOfReplicas=1&lt;br /&gt;ndb_mgmd=n1&lt;br /&gt;ndbd=n2&lt;br /&gt;mysqld=n1,n1,n1,n1&lt;br /&gt;Diskless=1&lt;br /&gt;MaxNoOfExecutionThreads=6&lt;br /&gt;MaxNoOfConcurrentTransactions=16384&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-3994150035274990147?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/3994150035274990147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=3994150035274990147' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/3994150035274990147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/3994150035274990147'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/11/500k-reads-per-second-on-1-datanode.html' title='500k reads per second on 1 datanode'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-8497639516100363393</id><published>2008-10-16T10:00:00.000+02:00</published><updated>2008-10-16T10:43:01.107+02:00</updated><title type='text'>forks, add-on patch-sets and features</title><content type='html'>so far little is happening in this area with MySQL Cluster.&lt;br /&gt;would be interesting to get patches to cluster from a(ny) (huge-web) company...&lt;br /&gt;wonder if that will ever happen...&lt;br /&gt;maybe we don't use enough buzz-words&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;it could also be that we add features in a high enough pace ourselves,&lt;br /&gt;preliminary benchmarks of our multi-threaded ndbmtd(4 threads) &lt;br /&gt;shows up to 3.7  times better throughput than singled threaded ndbd.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-8497639516100363393?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/8497639516100363393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=8497639516100363393' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8497639516100363393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8497639516100363393'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/10/forks-add-on-patch-sets-and-features.html' title='forks, add-on patch-sets and features'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-8140012364834507328</id><published>2008-09-15T09:48:00.002+02:00</published><updated>2008-09-15T09:48:52.830+02:00</updated><title type='text'>create(drop) node(group) pushed</title><content type='html'>this friday.&lt;br /&gt;&lt;br /&gt;no (currently :) known bugs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-8140012364834507328?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/8140012364834507328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=8140012364834507328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8140012364834507328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8140012364834507328'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/09/createdrop-nodegroup-pushed.html' title='create(drop) node(group) pushed'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-6207211340440647685</id><published>2008-09-02T14:49:00.005+02:00</published><updated>2008-09-02T14:55:45.576+02:00</updated><title type='text'>end of think-period</title><content type='html'>today, I think I finally cracked how to create(drop) a nodegroup.&lt;br /&gt;basic concept is to&lt;br /&gt;- temporary block gcp&lt;br /&gt;- create(drop) the node group&lt;br /&gt;- unblock gcp&lt;br /&gt;&lt;br /&gt;(the same concept is btw used for adding a starting node to gcp)&lt;br /&gt;the block should last for micro seconds&lt;br /&gt;&lt;br /&gt;now it's only implementing it...&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;very happy that I now know how to proceed,&lt;br /&gt;I've spent quite a lot of time trying to figure out a 100% safe &lt;br /&gt;way of doing it...(wo/ blocking gcp)&lt;br /&gt;but this solution will be efficient and fairly easy to implement.&lt;br /&gt;(if any protocol dealing with (multi)node-failures can be considered easy)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-6207211340440647685?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/6207211340440647685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=6207211340440647685' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/6207211340440647685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/6207211340440647685'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/09/end-of-think-period.html' title='end of think-period'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-8553467984527998480</id><published>2008-08-30T11:22:00.004+02:00</published><updated>2008-08-30T11:34:53.918+02:00</updated><title type='text'>status of create/drop node(group)</title><content type='html'>status: &lt;br /&gt;  create/drop nodegroup now works with one noticeable exception&lt;br /&gt;  replication cant be connected while the nodegroup is added.&lt;br /&gt;  i'll try to find time to fix this next week.&lt;br /&gt;&lt;br /&gt;howto:&lt;br /&gt;  - start a 2 node cluster&lt;br /&gt;  - create table T1&lt;br /&gt;  - stop ndb_mgmd, add 2 nodes, start ndb_mgmd&lt;br /&gt;  - either stop the 2 running nodes and restart all 4&lt;br /&gt;    or rolling restart the 2 running nodes, and then start the 2 new nodes&lt;br /&gt;  - ndb_mgm&gt; create nodegroup n1,n2&lt;br /&gt;  - alter table T1 add partitions partitions 2&lt;br /&gt;&lt;br /&gt;Tata! fully online scaling of the cluster&lt;br /&gt;&lt;br /&gt;howto backwards:&lt;br /&gt;  - drop table T1&lt;br /&gt;  - ndb_mgm&gt; drop nodegroup X&lt;br /&gt;  - ndb_mgm&gt; n1,n2 stop -a&lt;br /&gt;  - stop ndb_mgmd, remove the 2 nodes, start ndb_mgmd&lt;br /&gt;  - either stop the 2 running nodes and restart them&lt;br /&gt;    or rolling restart them&lt;br /&gt;&lt;br /&gt;  (A nodegroup is allowed to be dropped if it does not contain any data)&lt;br /&gt;&lt;br /&gt;side effect:&lt;br /&gt;  - I added the possibility to specify nodegroups per node in the config-file&lt;br /&gt;    (this I intend to use for testing, but maybe someone might find it interesting)&lt;br /&gt;&lt;br /&gt;future:&lt;br /&gt;  - magnus is working on "online configuration change" in the ndb_mgmd&lt;br /&gt;    once this is complete/functional, we can add the "add node"-command &lt;br /&gt;    so that the entire procedure can be done wo/ node restarts.&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/1526532204016125586-8553467984527998480?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/8553467984527998480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=8553467984527998480' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8553467984527998480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8553467984527998480'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/08/status-of-createdrop-nodegroup.html' title='status of create/drop node(group)'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-3311955458247827007</id><published>2008-08-15T13:20:00.001+02:00</published><updated>2008-08-15T13:21:19.726+02:00</updated><title type='text'>In pain</title><content type='html'>I miss bk&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-3311955458247827007?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/3311955458247827007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=3311955458247827007' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/3311955458247827007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/3311955458247827007'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/08/in-pain.html' title='In pain'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-7438096040192270759</id><published>2008-07-04T09:15:00.003+02:00</published><updated>2008-07-04T09:21:10.432+02:00</updated><title type='text'>summer months</title><content type='html'>june: customer issues and bugs&lt;br /&gt;july: vacation&lt;br /&gt;august: must complete add node (I haven't started, but work has been done by stewart)&lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;&lt;br /&gt;No need to comment this...&lt;br /&gt;if you want to make me happy, choose one of the earlier posts&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-7438096040192270759?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/7438096040192270759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=7438096040192270759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7438096040192270759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7438096040192270759'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/07/summer-months.html' title='summer months'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-5469658828639663178</id><published>2008-06-08T19:14:00.003+02:00</published><updated>2008-06-08T19:23:27.878+02:00</updated><title type='text'>boom-tjackalack! table-reorg is pushed</title><content type='html'>so...now table-reorg is in 6.4.&lt;br /&gt;pushbuild found a few problems...that are fixed.&lt;br /&gt;&lt;br /&gt;what is left:&lt;br /&gt;1) detailed test-prg (which will check consistency after each step, by pausing schema-trans)&lt;br /&gt;2) handling of cluster-crash during reorg&lt;br /&gt;only way right now, is to restore a backup if you get crash during reorg&lt;br /&gt;3) node failure during might cause SUMA to not scan some fragments &lt;br /&gt;   (this bug is an old one, existing in 4.1, that also affect unique index build)&lt;br /&gt;4) reorg-abort (in certain state) leaves REORG_MOVED bit on records,&lt;br /&gt;   cause subsequent reorgs (to different partitioning) to create inconsistent data.&lt;br /&gt;&lt;br /&gt;Not too bad...&lt;br /&gt;I do however think it's quite testable (although maybe not extremely interesting wo/ add node)&lt;br /&gt;&lt;br /&gt;Will start on add-node...and fix problems above in parallel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-5469658828639663178?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/5469658828639663178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=5469658828639663178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/5469658828639663178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/5469658828639663178'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/06/boom-tjackalack-table-reorg-is-pushed.html' title='boom-tjackalack! table-reorg is pushed'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-4123365443625831724</id><published>2008-06-05T16:08:00.002+02:00</published><updated>2008-06-05T16:12:48.455+02:00</updated><title type='text'>almost push-time</title><content type='html'>I've now:&lt;br /&gt;- fixed error handling (although testing is still not 100%)&lt;br /&gt;- pushed the grand unified table state patch&lt;br /&gt;- pushed a few patches in the series...&lt;br /&gt;&lt;br /&gt;No one commented asking for a snapshot,&lt;br /&gt;so i decided to push into 6.4 instead.&lt;br /&gt;&lt;br /&gt;Will just spend some more time testing/cleaning up...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-4123365443625831724?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/4123365443625831724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=4123365443625831724' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/4123365443625831724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/4123365443625831724'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/06/almost-push-time.html' title='almost push-time'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-7385405261326989871</id><published>2008-06-05T13:51:00.002+02:00</published><updated>2008-06-05T14:21:54.205+02:00</updated><title type='text'>response to comment with questions</title><content type='html'>1) Which operations can I perform during a table reorg?&lt;br /&gt;everything except DDL and node restart&lt;br /&gt;ndb does currently only allow one DDL at a time, and the reorg is a DDL&lt;br /&gt;ndb does currently prevent node restart while DDL in ongoing&lt;br /&gt;&lt;br /&gt;2) What happens to an ongoing table reorg during &lt;br /&gt;2a) node failure&lt;br /&gt;reorg will be completed or aborted depending on how long it has progressed &lt;br /&gt;(i.e if commit has been started)&lt;br /&gt;2b) cluster failure, and recovery?&lt;br /&gt;reorg will be completed or aborted depending on how long it has progressed&lt;br /&gt;(i.e if commit has been written)&lt;br /&gt;&lt;br /&gt;The reorg is committed after rows have been copied, but before rows has been&lt;br /&gt;deleted/cleaned up&lt;br /&gt;&lt;br /&gt;3) How do my a) SQL b) NDBAPI applications have to be changed to cope with table reorg?&lt;br /&gt;&lt;br /&gt;Not at all, but&lt;br /&gt;- your application can "hint" incorrectly if it does not check table state&lt;br /&gt;and refresh it after reorg has been committed&lt;br /&gt;- your application might encounter temporary errors due to the reorg,&lt;br /&gt;  this error is the same that you can get during a node restart, so no special&lt;br /&gt;  handling of this is needed.&lt;br /&gt;  And hopefully the temporary errors should be rare (testing will show...)&lt;br /&gt;&lt;br /&gt;4) How can I trade off the duration of a reorganisation against its resource impact (CPU, Memory, Bandwidth etc.)&lt;br /&gt;&lt;br /&gt;Currently you can't. speed is hard-coded. this will maybe be a future feature&lt;br /&gt;&lt;br /&gt;5) What performance impact does re-org have on ongoing DML and query operations?&lt;br /&gt;&lt;br /&gt;Don't know yet, not enough testing. debug-complied versions that I tested gave maybe 5-10% impact. (there is also another optimization that I want to do...which will reduce the impact)&lt;br /&gt;&lt;br /&gt;6) What impact does re-org have on DDL operations?&lt;br /&gt;Ongoing none, cause we only support one at a time.&lt;br /&gt;And the re-org will prevent other DDL from starting while it's running&lt;br /&gt;&lt;br /&gt;7) Will there be some easy way to re-org all cluster tables to balance across all available nodes?&lt;br /&gt;&lt;br /&gt;write a stored procedure that list all tables, and reorgs them one by one.&lt;br /&gt;&lt;br /&gt;8) How are indexes modified during table re-org?&lt;br /&gt;ordered indexes are reorganised together with base table&lt;br /&gt;unique indexes are currently untouched (this should probably change)&lt;br /&gt;&lt;br /&gt;9) Which parts of the re-org are serial, and which are parallel?&lt;br /&gt;Same as all other schema-transactions after wl3600.&lt;br /&gt;I.e each operation-step is run parallel on each node,&lt;br /&gt;but only one operation-step is run at a time.&lt;br /&gt;&lt;br /&gt;This means that e.g copy and "cleanup" is run in parallel on all nodes.&lt;br /&gt;&lt;br /&gt;10) Can I perform an online upgrade to a version of MySQL Cluster that supports re-org?&lt;br /&gt;&lt;br /&gt;yes,&lt;br /&gt;&lt;br /&gt;11) Can I restore a backup from an old version of MySQL Cluster and get online re-org features?&lt;br /&gt;&lt;br /&gt;yes,&lt;br /&gt;&lt;br /&gt;12) What are the down sides of this table re-org implementation? &lt;br /&gt;&lt;br /&gt;none :-)&lt;br /&gt;but there are some areas for improvement&lt;br /&gt;&lt;br /&gt;3) Can re-org cope with heterogeneous NDBD nodes with different DataMemory capacities?&lt;br /&gt;&lt;br /&gt;In the kernel, yes, but there is no SQL interface currently to expose this&lt;br /&gt;&lt;br /&gt;14) How can I look at hash result to fragment id mapping tables?&lt;br /&gt;&lt;br /&gt;Using a hand-written ndbapi program&lt;br /&gt;(maybe will add this to ndb_desc)&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Puh...&lt;br /&gt;that comment held some may questions...&lt;br /&gt;that i maybe should not be asking for more comments...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-7385405261326989871?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/7385405261326989871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=7385405261326989871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7385405261326989871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7385405261326989871'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/06/response-to-comment-with-questions.html' title='response to comment with questions'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-1117806163419146288</id><published>2008-05-28T06:35:00.002+02:00</published><updated>2008-05-28T06:41:50.528+02:00</updated><title type='text'>known bugs fixed</title><content type='html'>now it's only the unknown remaining :-)&lt;br /&gt;&lt;br /&gt;mysql-test-run now passes for all tests&lt;br /&gt;&lt;br /&gt;current plan:&lt;br /&gt;1) will now start on adding error handling in dict,&lt;br /&gt;it shouldnt be that hard (or take that long)&lt;br /&gt;&lt;br /&gt;2) i'll (likely) also do the "grand unified state"-patch in dict (but in 6.4)&lt;br /&gt;aka remove table-state.&lt;br /&gt;&lt;br /&gt;3) also now started thinking about add-node&lt;br /&gt;&lt;br /&gt;4) maybe I should publish a snapshot...i'll wait to see if I get any comments&lt;br /&gt;requesting it&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;I missed my normal comments-fishing the last posts.&lt;br /&gt;Will try to keep the spirit (even if comments are few)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-1117806163419146288?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/1117806163419146288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=1117806163419146288' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/1117806163419146288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/1117806163419146288'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/05/known-bugs-fixed.html' title='known bugs fixed'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-276582225555151845</id><published>2008-05-23T13:58:00.002+02:00</published><updated>2008-05-23T14:13:39.936+02:00</updated><title type='text'>alter online table T add partition partitions N</title><content type='html'>I now enabled SQL-interface to table-reorg.&lt;br /&gt;&lt;br /&gt;The syntax (which is the same for other partition mgm) is&lt;br /&gt;ALTER ONLINE TABLE T ADD PARTITION PARTITIONS N;&lt;br /&gt;&lt;br /&gt;Also switched so that hashmap partitioning is used for all tables created using SQL.&lt;br /&gt;And mysql-test-run works (including a new ndb_add_partition-test)&lt;br /&gt;(except for some range/list partition testcases)&lt;br /&gt;&lt;br /&gt;it's still kind of fragile. Error handling is sparse...&lt;br /&gt;&lt;br /&gt;there are 3 known things which are easy to fix&lt;br /&gt;- ndbapi transaction hinting/pruning does not work after/during a reorg&lt;br /&gt;- unique indexes will not work after/during a reorg&lt;br /&gt;- only 1 reorg per table is possible (SUMA caches distribution information incorrectly)&lt;br /&gt;&lt;br /&gt;and one quite hard&lt;br /&gt;- cluster crash *during* table-reorg&lt;br /&gt;&lt;br /&gt;current plan is&lt;br /&gt;1) fix 3 easy known problems&lt;br /&gt;2) fix error handling&lt;br /&gt;3) write detailed test program (pushed back again!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-276582225555151845?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/276582225555151845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=276582225555151845' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/276582225555151845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/276582225555151845'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/05/alter-online-table-t-add-partition.html' title='alter online table T add partition partitions N'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-8292724177344246331</id><published>2008-05-20T11:17:00.003+02:00</published><updated>2008-05-20T11:22:36.632+02:00</updated><title type='text'>wl3600++ complete</title><content type='html'>I've coded and pushed wl3600++ to telco-6.4&lt;br /&gt;- lots of code simplification&lt;br /&gt;- lots of "duplicate" code removal&lt;br /&gt;&lt;br /&gt;Also merged it into table-reorg clone.&lt;br /&gt;And now system restart just started magically working.&lt;br /&gt;So I can again run mysql-test-run&lt;br /&gt;&lt;br /&gt;Will now fix any problems found by mysql-test-run.pl&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/1526532204016125586-8292724177344246331?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/8292724177344246331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=8292724177344246331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8292724177344246331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8292724177344246331'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/05/wl3600-complete.html' title='wl3600++ complete'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-8930440462040882769</id><published>2008-05-07T22:40:00.002+02:00</published><updated>2008-05-07T22:44:38.329+02:00</updated><title type='text'>wl3600++ clarification</title><content type='html'>Just one thing...&lt;br /&gt;&lt;br /&gt;it's obvious that the only long term correct solution &lt;br /&gt;is to add a schema-log instead of the schema-file &lt;br /&gt;but the rules/framework that i'm developing will be&lt;br /&gt; so that a change like that is only (almost) on transaction level, &lt;br /&gt;i.e operations will be almost unchanged...&lt;br /&gt;&lt;br /&gt;however, &lt;br /&gt;the schema-log will likely not happen this, next of year after next year...(my guess)&lt;br /&gt;&lt;br /&gt;Just wanted to clarify...&lt;br /&gt;(that i'm not an idiot, well at least not a complete one :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-8930440462040882769?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/8930440462040882769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=8930440462040882769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8930440462040882769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/8930440462040882769'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/05/wl3600-clarification.html' title='wl3600++ clarification'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-1297648686669246484</id><published>2008-05-07T15:07:00.002+02:00</published><updated>2008-05-07T15:12:25.238+02:00</updated><title type='text'>wl3600++</title><content type='html'>Has now agreed on a way forward with pekka on wl3600&lt;br /&gt;How to handle SchemaFile, batching &amp;amp; completeness needed for table-reorg.&lt;br /&gt;What operations/transaction shall (not) do in different stages&lt;br /&gt;&lt;br /&gt;Having a consistent model feels great!&lt;br /&gt;(compared to the evolutionary mesh that is present today)&lt;br /&gt;&lt;br /&gt;Now I only need to implement it...&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;I now have at least two distinct readers (comments from 2 persons)...&lt;br /&gt;I'm blogging my way into fame&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-1297648686669246484?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/1297648686669246484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=1297648686669246484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/1297648686669246484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/1297648686669246484'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/05/wl3600.html' title='wl3600++'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-4827726086504692199</id><published>2008-04-30T13:45:00.002+02:00</published><updated>2008-04-30T13:53:05.032+02:00</updated><title type='text'>Core functionality(reorg) complete!</title><content type='html'>transactions + scan + replication works!&lt;br /&gt;&lt;br /&gt;Now remaining:&lt;br /&gt;- error handling&lt;br /&gt;- detailed unit testing&lt;br /&gt;- durability of HashMap&lt;br /&gt;- fix schema trans restart on SR&lt;br /&gt;- fix unique index&lt;br /&gt;- ndbapi interface to HashMap&lt;br /&gt;- optimize COPY by using new operation(ZMOVE)&lt;br /&gt;which creates less load and interacts better with replication&lt;br /&gt;(currently the COPY produces events which is "correct" but not optimal)&lt;br /&gt;- sql-support&lt;br /&gt;&lt;br /&gt;And of course add-node :)&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Personally I think this post deserves at least one comment...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-4827726086504692199?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/4827726086504692199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=4827726086504692199' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/4827726086504692199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/4827726086504692199'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/04/core-functionalityreorg-complete.html' title='Core functionality(reorg) complete!'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-9068486501890532466</id><published>2008-04-29T22:56:00.002+02:00</published><updated>2008-04-29T23:00:28.330+02:00</updated><title type='text'>Core functionality(reorg) almost done</title><content type='html'>Core functionality is almost complete,&lt;br /&gt;- all operations in place, running in correct order&lt;br /&gt;- all transactions work correctly (with all synchronization)&lt;br /&gt;&lt;br /&gt;Remaining is "only" 2 local functions, related to SUMA switchover.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Need to spend serious time on a contest to add to this blog,&lt;br /&gt;to get more comments!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-9068486501890532466?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/9068486501890532466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=9068486501890532466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/9068486501890532466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/9068486501890532466'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/04/core-functionalityreorg-almost-done.html' title='Core functionality(reorg) almost done'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-7007076184180639558</id><published>2008-04-24T20:47:00.002+02:00</published><updated>2008-04-24T20:57:11.087+02:00</updated><title type='text'>Eureka - SUMA switch over for table-reorg</title><content type='html'>First it struck me that&lt;br /&gt;- starting to double send events can be done wo/ synchronization, cause&lt;br /&gt; 1) this is basic techinque for node-failure handling&lt;br /&gt; 2) it does not matter if new-fragment does not contain full epoch, as it will contain&lt;br /&gt;    last part&lt;br /&gt;&lt;br /&gt;Then (today) it struck me that&lt;br /&gt;- turning off double send on old "home" for row does not either require synchronization&lt;br /&gt; (except doing it on epoch-boundary) but different fragments can do it on different times, cause&lt;br /&gt; - there is already double send ongoing, so no events will be lost&lt;br /&gt;&lt;br /&gt; This makes the task relatively straightforward, but following is still needed,&lt;br /&gt; - replication triggers must be turned off at epoch boundary&lt;br /&gt; - replication triggers must be turned off 3 epochs after "turn off" has been initiated&lt;br /&gt;&lt;br /&gt;- all of above means that it can be handled per node...(or maybe node group...)&lt;br /&gt;- have to think more about potential per node group synchronization though...&lt;br /&gt;&lt;br /&gt; Hope I'm right! Will discuss @office, to see if anyone can find any holes&lt;br /&gt; (including me, as I got the idea today)&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Still only one comment...I think I need to add a contest of something&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-7007076184180639558?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/7007076184180639558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=7007076184180639558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7007076184180639558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/7007076184180639558'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/04/eureka-suma-switch-over-for-table-reorg.html' title='Eureka - SUMA switch over for table-reorg'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-4727607472395312170</id><published>2008-04-21T07:18:00.003+02:00</published><updated>2008-04-21T07:25:36.334+02:00</updated><title type='text'>What is table-reorg</title><content type='html'>Table-reorg is the the procedure which will be executed on "alter table X add partitions Y" .&lt;br /&gt;This you would typically do when you have added Y new nodes to your cluster.&lt;br /&gt;&lt;br /&gt;The procedure is online, i.e transactions can run during the operation&lt;br /&gt;and no extra memory will be needed on the "old" nodes.&lt;br /&gt;&lt;br /&gt;The reorg is based on linear hashing (but wo/ the normal skewness in distribution)&lt;br /&gt;E.g when going from 2 to 4 partitions 50% of the rows will be moved.&lt;br /&gt;&lt;br /&gt;The copying is done in parallel on the "old" nodes, &lt;br /&gt;and consistency is kept using triggers.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;So I have atleast 1 reader...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-4727607472395312170?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/4727607472395312170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=4727607472395312170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/4727607472395312170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/4727607472395312170'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/04/what-is-table-reorg.html' title='What is table-reorg'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-835641586389128782</id><published>2008-04-16T21:25:00.002+02:00</published><updated>2008-04-16T21:30:29.567+02:00</updated><title type='text'>Transactions now work!</title><content type='html'>- Transactions now work correctly, both pk/uk and table/index scan&lt;br /&gt;- I have decided how to do testing (single-step through reorg)&lt;br /&gt;&lt;br /&gt;Fixing schema-transaction seems like a must now (for 6.4)&lt;br /&gt;- schema-file flushing&lt;br /&gt;- complete phase&lt;br /&gt;Maybe I can come up with something else to do first...&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Still no comments on my blog...wonder if I have any readers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-835641586389128782?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/835641586389128782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=835641586389128782' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/835641586389128782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/835641586389128782'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/04/transactions-now-work.html' title='Transactions now work!'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-2870715889977737322</id><published>2008-03-28T16:10:00.003+01:00</published><updated>2008-03-28T16:14:43.721+01:00</updated><title type='text'>Assorted notes</title><content type='html'>- transaction consistency (big part is testing)&lt;br /&gt;- fix schema trans complete phase (to 6.4 directly)&lt;br /&gt;- durability of objects&lt;br /&gt;- fix schema trans restart on SR&lt;br /&gt;- fix unique index&lt;br /&gt;- sql&lt;br /&gt;- automagic HashMap creation&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Will likely next build testing framework...for transaction consistency&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-2870715889977737322?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/2870715889977737322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=2870715889977737322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/2870715889977737322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/2870715889977737322'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/03/assorted-notes.html' title='Assorted notes'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-5075729701350876659</id><published>2008-03-28T15:08:00.001+01:00</published><updated>2008-03-28T15:12:21.974+01:00</updated><title type='text'>table-reorg plan/progress II</title><content type='html'>1) hashmap (done)&lt;br /&gt;2) add partitions (done)&lt;br /&gt;3) reorg-triggers (done)&lt;br /&gt;4) reorg-copy (done)&lt;br /&gt;5) reorg-delete (done)&lt;br /&gt;6) consistent scan (partially done)&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Held live-demo for office audience&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-5075729701350876659?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/5075729701350876659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=5075729701350876659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/5075729701350876659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/5075729701350876659'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/03/table-reorg-planprogress-ii.html' title='table-reorg plan/progress II'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-58052602655844528</id><published>2008-03-27T12:07:00.003+01:00</published><updated>2008-03-27T12:13:30.576+01:00</updated><title type='text'>table-reorg plan/progress</title><content type='html'>1) hashmap        (done)&lt;br /&gt;2) add partitions (done)&lt;br /&gt;3) reorg-triggers (done)&lt;br /&gt;4) reorg-copy     (done)&lt;br /&gt;5) reorg-delete&lt;br /&gt;6) consistent scan&lt;br /&gt;&lt;br /&gt;done = runnable != complete&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;just "finished" reorg-copy, still needs polishing...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-58052602655844528?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/58052602655844528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=58052602655844528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/58052602655844528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/58052602655844528'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/03/table-reorg-planprogress.html' title='table-reorg plan/progress'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1526532204016125586.post-2543114661138875260</id><published>2008-03-26T20:31:00.001+01:00</published><updated>2008-03-26T20:33:23.317+01:00</updated><title type='text'>Announce</title><content type='html'>Just started...we'll see if I use it&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1526532204016125586-2543114661138875260?l=jonasoreland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonasoreland.blogspot.com/feeds/2543114661138875260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1526532204016125586&amp;postID=2543114661138875260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/2543114661138875260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1526532204016125586/posts/default/2543114661138875260'/><link rel='alternate' type='text/html' href='http://jonasoreland.blogspot.com/2008/03/announce.html' title='Announce'/><author><name>Jonas Oreland</name><uri>http://www.blogger.com/profile/02551781456999098405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
