Bug #39268 | No transaction hints used to update SYSTAB_0 for autoincrement and PK-less table | ||
---|---|---|---|
Submitted: | 5 Sep 2008 7:05 | Modified: | 22 Sep 2009 14:18 |
Reporter: | Mikael Ronström | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Cluster: Cluster (NDB) storage engine | Severity: | S5 (Performance) |
Version: | mysql-5.1-telco-7.0 | OS: | Any |
Assigned to: | Martin Skold | CPU Architecture: | Any |
Tags: | (5.1.27-ndb-6.3, 16) |
[5 Sep 2008 7:05]
Mikael Ronström
[4 Feb 2009 14:08]
Martin Skold
http://lists.mysql.com/commits/65174
[10 Feb 2009 16:31]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/65775 2836 Martin Skold 2009-02-10 [merge] Merge
[11 Feb 2009 15:17]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/65920 3252 Martin Skold 2009-02-11 [merge] Merge
[11 Feb 2009 20:45]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/65957 3257 Martin Skold 2009-02-11 [merge] Merge
[11 Feb 2009 21:04]
Bugs System
Pushed into 5.1.31-ndb-6.4.3 (revid:martin.skold@mysql.com-20090211204523-03nx13fjekybwez2) (version source revid:martin.skold@mysql.com-20090211204523-03nx13fjekybwez2) (merge vers: 5.1.31-ndb-6.4.3) (pib:6)
[11 Feb 2009 21:06]
Bugs System
Pushed into 5.1.31-ndb-6.2.17 (revid:martin.skold@mysql.com-20090210162313-g4ou3ovzoyoljaej) (version source revid:martin.skold@mysql.com-20090204135340-m9u7dfp2g3ul8ass) (merge vers: 5.1.31-ndb-6.2.17) (pib:6)
[11 Feb 2009 21:07]
Bugs System
Pushed into 5.1.31-ndb-6.3.23 (revid:martin.skold@mysql.com-20090210163054-bcupy4stktagp5rt) (version source revid:martin.skold@mysql.com-20090210163054-bcupy4stktagp5rt) (merge vers: 5.1.31-ndb-6.3.23) (pib:6)
[18 Sep 2009 13:58]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/83739 2998 Martin Skold 2009-09-18 bug#39268 No transaction hints used to update SYSTAB_0 for autoincrement and PK-less table modified: storage/ndb/src/ndbapi/Ndb.cpp
[18 Sep 2009 14:00]
Martin Skold
First patch is incorrect, hint should be against table SYSTAB_0
[21 Sep 2009 11:44]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/83902 3053 Martin Skold 2009-09-21 [merge] Merge modified: mysql-test/include/restart_mysqld.inc storage/ndb/src/ndbapi/Ndb.cpp
[21 Sep 2009 11:46]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/83906 3012 Martin Skold 2009-09-21 [merge] Merge modified: storage/ndb/src/ndbapi/Ndb.cpp
[21 Sep 2009 12:26]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/83920 3009 Martin Skold 2009-09-21 [merge] Merge modified: mysql-test/suite/ndb/r/ndb_multi.result mysql-test/suite/ndb/t/ndb_multi.test sql/ha_ndbcluster.cc sql/ha_ndbcluster_binlog.cc sql/ha_ndbcluster_binlog.h storage/ndb/src/ndbapi/Ndb.cpp
[21 Sep 2009 13:52]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/83946 3057 Martin Skold 2009-09-21 [merge] Merge modified: mysql-test/include/restart_mysqld.inc mysql-test/suite/ndb/r/ndb_multi.result mysql-test/suite/ndb/t/ndb_multi.test sql/ha_ndbcluster.cc sql/ha_ndbcluster_binlog.cc sql/ha_ndbcluster_binlog.h storage/ndb/src/ndbapi/Ndb.cpp
[21 Sep 2009 14:23]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/83957 3024 Martin Skold 2009-09-21 [merge] Merge modified: mysql-test/suite/ndb/r/ndb_multi.result mysql-test/suite/ndb/t/ndb_multi.test sql/ha_ndbcluster.cc sql/ha_ndbcluster_binlog.cc sql/ha_ndbcluster_binlog.h storage/ndb/src/ndbapi/Ndb.cpp
[22 Sep 2009 6:18]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/84025 3020 Martin Skold 2009-09-22 [merge] Merge modified: mysql-test/suite/ndb/r/ndb_multi.result mysql-test/suite/ndb/t/ndb_multi.test sql/ha_ndbcluster.cc sql/ha_ndbcluster_binlog.cc sql/ha_ndbcluster_binlog.h storage/ndb/src/ndbapi/Ndb.cpp
[22 Sep 2009 14:18]
Jon Stephens
Documented bugfix in the NDB-6.2.17, 6.3.23, and 6.4.3 changelogs, as follows: Updates of the SYSTAB_0 system table to obtain a unique identifier did not use transaction hints for tables having no primary key. In such cases the NDB kernel used a cache size of 1. This meant that each insert into a table not having a primary key required an update of the corresponding SYSTAB_0 entry, creating a potential performance bottleneck. With this fix, inserts on NDB tables without primary keys can be under some conditions be performed up to 100% faster than previously. Closed. (Note: Changelog entry appearing for 6.4.3 means that the fix also appears in NDB 7.0.4 and later releases.)
[30 Sep 2009 8:13]
Bugs System
Pushed into 5.1.37-ndb-6.2.19 (revid:frazer@mysql.com-20090929142503-sst6g3fs0vx9fgil) (version source revid:martin.skold@mysql.com-20090918135924-dr4wa8cz36yszxes) (merge vers: 5.1.37-ndb-6.2.19) (pib:11)
[30 Sep 2009 8:13]
Bugs System
Pushed into 5.1.37-ndb-6.3.28 (revid:jonas@mysql.com-20090930070741-13u316s7s2l7e1ej) (version source revid:martin.skold@mysql.com-20090921135309-q77376ub6jvk10mg) (merge vers: 5.1.37-ndb-6.3.27) (pib:11)
[30 Sep 2009 8:14]
Bugs System
Pushed into 5.1.37-ndb-7.0.9 (revid:jonas@mysql.com-20090930075942-1q6asjcp0gaeynmj) (version source revid:martin.skold@mysql.com-20090921142346-kg9qrq7flqgd6wum) (merge vers: 5.1.37-ndb-7.0.8) (pib:11)
[30 Sep 2009 8:15]
Bugs System
Pushed into 5.1.35-ndb-7.1.0 (revid:jonas@mysql.com-20090930080049-1c8a8cio9qgvhq35) (version source revid:martin.skold@mysql.com-20090922061929-qjq5pztm76lwa7ri) (merge vers: 5.1.35-ndb-7.1.0) (pib:11)
[22 Feb 2011 16:07]
Linhai Song
I find some similar places in mysql-cluster-gpl-6.3.20. In these places, startTransaction() is called with no parameters, and getNdbOperation() is called with a dataTable parameter. If we move the dataTable parameter from getNdbOperation() to startTransaction(), could we get a better performance? The places I find include: mysql-cluster-gpl-6.3.20/sql/ha_ndbcluster_binlog.cc : 1616 if ((trans= ndb->startTransaction()) == 0) mysql-cluster-gpl-6.3.20/sql/ha_ndbcluster_binlog.cc : 1649 r|= (op= trans->getNdbOperation(ndbtab)) == 0; while (1) { if ((trans= ndb->startTransaction()) == 0) goto err; { NdbOperation *op= 0; int r= 0; /* read the bitmap exlusive */ r|= (op= trans->getNdbOperation(ndbtab)) == 0; DBUG_ASSERT(r == 0); r|= op->readTupleExclusive(); DBUG_ASSERT(r == 0); ============================================================== mysql-cluster-gpl-6.3.20/sql/ha_ndbcluster_binlog.cc : 3685 NdbTransaction *trans= ndb->startTransaction(); mysql-cluster-gpl-6.3.20/sql/ha_ndbcluster_binlog.cc : 3703 if ((_op= trans->getNdbOperation(reptab)) == NULL) abort(); for (;;) { NdbTransaction *trans= ndb->startTransaction(); if (trans == NULL) { ndberror= ndb->getNdbError(); break; } NdbRecAttr *col_binlog_type_rec_attr[2]; NdbRecAttr *col_conflict_fn_rec_attr[2]= {NULL, NULL}; uint32 ndb_binlog_type[2]; const uint sz= 256; char ndb_conflict_fn_buf[2*sz]; char *ndb_conflict_fn[2]= {ndb_conflict_fn_buf, ndb_conflict_fn_buf+sz}; NdbOperation *op[2]; uint32 i, id= 0; for (i= 0; i < 2; i++) { NdbOperation *_op; DBUG_PRINT("info", ("reading[%u]: %s,%s,%u", i, db, table_name, id)); if ((_op= trans->getNdbOperation(reptab)) == NULL) abort(); if (_op->readTuple(NdbOperation::LM_CommittedRead)) abort(); ndb_pack_varchar(col_db, tmp_buf, db, strlen(db)); if (_op->equal(col_db->getColumnNo(), tmp_buf)) abort(); ndb_pack_varchar(col_table_name, tmp_buf, table_name, strlen(table_name)); if (_op->equal(col_table_name->getColumnNo(), tmp_buf)) abort(); if (_op->equal(col_server_id->getColumnNo(), id)) abort(); if ((col_binlog_type_rec_attr[i]= _op->getValue(col_binlog_type, (char *)&(ndb_binlog_type[i]))) == 0) abort(); /* optional columns */ ============================================================================ mysql-cluster-gpl-6.3.20/sql/ha_ndbcluster_binlog.cc : 1957 if ((trans= ndb->startTransaction()) == 0) mysql-cluster-gpl-6.3.20/sql/ha_ndbcluster_binlog.cc : 1963 r|= (op= trans->getNdbOperation(ndbtab)) == 0; while (1) { const char *log_db= db; const char *log_tab= table_name; const char *log_subscribers= (char*)schema_subscribers.bitmap; uint32 log_type= (uint32)type; if ((trans= ndb->startTransaction()) == 0) goto err; while (1) { NdbOperation *op= 0; int r= 0; r|= (op= trans->getNdbOperation(ndbtab)) == 0; DBUG_ASSERT(r == 0); r|= op->writeTuple();