草庐IT

innodb-performance-optimization

全部标签

mysql - 我可以在 MySQL/InnoDB 中关闭事务吗?

我有一个Django应用程序,其中InnoDB中默认的“REPEATABLEREAD”事务隔离级别导致不同的进程具有与数据库中当前不同的数据View。例如进程1进行了更改,但进程2没有看到它。我不需要应用中的交易完整性;我可以完全关闭事务,以便执行SELECT的所有进程都看到相同的数据吗?这样做有什么缺点吗?这就是“READUNCOMMITTED”的意思吗?欢迎指点雷切尔 最佳答案 我建议您将InnoDB表转换为myISAM。如果您的标准是速度,那么您将通过使用面向事务的表类型(InnoDB)并仅禁用事务来浪费大量潜力。如果您只是将

MySQL 事务陷阱

我想在一个项目中使用MySQL事务,但之前没有使用过它们,我想我已经了解了任何潜在的问题。我在http://mysqldatabaseadministration.blogspot.com/2007/04/innodb-performance-optimization.html找到了一篇文章这表明死锁很常见,您的应用程序应该能够处理它们。在这种情况下,“死锁”指的是什么?据我了解,事务不会锁定数据库,因此它不会被锁定。我将如何处理这样的问题。还有其他我应该注意的问题吗? 最佳答案 当事务1获取(用于写入)资源A而同时事务2获取资源B

InnoDB 的 MySQL 死锁问题

我有一个中央数据库服务器和几个“工作”服务器,它们同时执行这样的查询:UPDATEjob_queueSETworker='108.166.81.112',attempts=attempts+1,started='2014-01-1410:34:03',token='13eb3e6a8c3e1becb34051e08f19fd62'WHEREcompleted='0000-00-0000:00:00'AND(started='0000-00-0000:00:00'ORstarted有时我的job_queue表会被锁定,如果我运行“SHOWENGINEINNODBSTATUS”,我会得到如

mysql - 在 MySQL InnoDB 中替换为表非常慢

使用MySQL(确切地说是MariaDB)。我有以下脚本,需要每隔一天运行一次以更新我的数据库,但速度慢得令人无法忍受。每个要更新的表都需要运行数小时。这是一个shell脚本:CMD_MYSQL="${MYSQL_DIR}mysql--local-infile=1--default-character-set=utf8--protocol=${MYSQL_PROTOCOL}--port=${MYSQL_PORT}--user=${MYSQL_USER}--pass=${MYSQL_PASS}--host=${MYSQL_HOST}--database=${MYSQL_DB}"###Up

mysql - COUNT(*) 是否等待 InnoDB 中的行锁?

即使对于诸如SELECTCOUNT(*)FROMt的查询,MySQLInnoDB表是否等待写锁?我的情况:我有一个包含50000行的表,其中有很多更新(每行都有View)。InnoDB应该在更新的行上放置一个写锁。但是当我在这个表上只使用COUNT(*)进行查询时,MySQL甚至可以在不等待写锁的情况下回答这个查询,因为没有UPDATE会改变行数.非常感谢! 最佳答案 不,MySql不会为仅从表中读取数据的查询锁定InnoDb表。这只是旧的MyIsam表的情况,所有读者都必须等到编写者完成,反之亦然。对于InnoDb表,他们实现了M

mysql - 在这种情况下,MyISAM 比 mysql 中的 InnoDB 快得多

我一直在编写计算InnoDB表中客户之间距离的算法的结果。例如,如果我的客户是A、B、C和D,则数据库中的表如下所示,除其他列外:From|To|DistanceAB344AC274AD182BC338等等...行数很多我想我会达到5000万。其他列是product_type和value。这些告诉我客户B(列中的customer_to)对该product_type的购买量。这意味着我会根据客户B购买的product_type的数量对每对进行多次。我需要一个查询来将每个客户与他的邻居购买的产品和值(value)分组。查询如下所示:selectcustomer_from,product_t

mysql - 将表从 MyISAM 转换为 INNODB

我只是想将一个表从MyISAM转换为INNODB。这是为了使用testopia进行bugzilla升级。这个简单的命令失败了。ALTERTABLE表名TYPE=INNODB;ERROR1214(HY000):使用的表类型不支持FULLTEXT索引我知道它不支持FULLTEXT索引,但我还是希望它能转换。我是否必须在转换前删除表上的全文索引?有没有办法查询它们并将它们全部删除? 最佳答案 首先,查看您的CREATETABLE语句:SHOWCREATETABLEtablename它会像这样显示你所有的全文索引:…,FULLTEXTKEY

mysql - 使用 innoDb 实现搜索功能的最佳方式

如果索引在大型产品表中,我需要使用innodb对一对进行全文搜索,MyISAM不是一个选项,因为它缺乏事务和关系支持。我可以想到几种方法来做到这一点,插件、存储过程、带键的搜索表和MyIsam格式的复制索引。您过去是如何实现这一目标的,这是最好的方法(包括我没有提到的任何方法),为什么?插件听起来很昂贵,存储过程听起来很慢,搜索表听起来像是管理员的噩梦。很想听听您的意见。 最佳答案 一种可能是使用外部(独立于数据库)全文引擎,例如Lucene(如果您使用的是PHP,您可能还想看看Zend_Search_Lucene)有很多(一些免费

mysql - 读写环境中的 MEMORY(HEAP) 与 InnoDB

我想使用MySQL编写一个实时应用程序。它需要一个小表(少于10000行),该表将承受大量读取(扫描)和写入(更新和一些插入/删除)负载。我说的是每秒10000次更新或选择。这些语句将仅在少数(少于10个)打开的mysql连接上执行。表很小,不包含任何需要存储在磁盘上的数据。所以我问哪个更快:InnoDB还是MEMORY(HEAP)?我的想法是:两个引擎都可能直接从内存中提供SELECT,因为甚至InnoDB也会缓存整个表。更新怎么样?(innodb_flush_log_at_trx_commit?)我主要关心的是锁定行为:InnoDB行锁与MEMORY表锁。这是否会成为MEMORY实

mysql - 为什么 INNODB 批量插入会导致自动增量主键跳过值?

我很熟悉InnoDB中失败的插入会导致自动递增的主键出现间隙这一事实,我认为这无关紧要(对我来说并不明显)。我遇到的问题是,我将5条记录插入到具有自动递增主键的表中,这导致主键的间隙从5到8。这是一个重复该问题的脚本。DROPTABLEIFEXISTS`test_table`;CREATETABLE`test_table`(`A`int(10)unsignedNOTNULLAUTO_INCREMENT,`B`int(10)unsignedNOTNULL,PRIMARYKEY(`A`))ENGINE=INNODBAUTO_INCREMENT=1DEFAULTCHARSET=utf8;in