草庐IT

innodb_flush_method

全部标签

mysql - django/innodb -- 旧 session 和事务的问题

我们刚刚将MySQL数据库从MyIsam切换到Innodb,我们发现Django中出现了一个奇怪的问题。每当我们进行数据库事务时,现有session都不会接收它……永远不会。我们可以从mysql终端看到数据库中的新记录,但是现有的djangosession(即已经打开的shell)不会记录更改。例如:外壳1:>>>my_obj=MyObj.objects.create(foo="bar")>>>my_obj.pk1Shell2(在上面打开之前)>>>my_obj=MyObj.objects.filter(pk=1)[]外壳3(MySQL):mysql>selectidfrommyapp

mysql - 什么是最积极的 FLUSH/RESET mysql 命令来清除查询缓存(以及其他任何...)

我在mysql.com上阅读这里,这个FLUSH/RESET命令有多种变体。从mysqld清除一切可能(缓存、缓冲区、一切)的最积极的方法是什么?我们希望在不关闭守护进程的情况下尽可能接近“刚开始”。谢谢! 最佳答案 我想这些应该可以:RESETQUERYCACHE;FLUSHSTATUS,TABLESWITHREADLOCK;请阅读相应的手册部分并确保您知道自己在做什么;)http://dev.mysql.com/doc/refman/5.1/en/reset.htmlhttp://dev.mysql.com/doc/refman

MySQL/InnoDB 和长时间运行的查询

在使用myisam引擎运行查询时,因为它不是事务性的,所以长查询(据我所知)不会影响其他查询的数据。在InnoDB中,它警告的一件事是避免长查询。当InnoDB做快照时,它是不是把所有东西都拍下来了?我问这个问题的原因是:假设出于任何原因的查询比正常情况花费更长的时间并最终回滚。同时,还有200个其他用户更新或插入了行到数据库中。当长查询回滚时,它是否也删除了其他用户所做的更新/插入?或者涉及其他用户的行是否安全,除非他们与回滚的行交叉? 最佳答案 首先,我认为作为背景阅读multi-versionconcurrencycontro

InnoDB 上的 MySQL UPDATE 操作偶尔会超时

这些是InnoDB数据库中非常小的表上的简单UPDATE。有时,操作似乎已锁定,但不会超时。然后每个后续UPDATE都以超时结束。现在唯一的办法是让我的ISP重新启动守护程序。表中的每个字段都用于查询,因此所有字段都有索引,包括主字段。我不确定是什么原因导致初始锁定,而且我的ISP没有提供足够的信息来诊断问题。他们也不愿让我访问任何设置。在之前的工作中,我被要求处理类似的信息,但我会做INSERT。我定期运行一个脚本来从表中DELETE旧记录,这样就不需要过滤太多记录。当SELECTing时,我使用了外推技术,因此拥有的不仅仅是最新的数据是有用的。这个设置非常可靠,它永远不会挂起,即使

mysql - 对于 MySQL InnoDB 中的 View ,多大才算太大?

背景我正在使用一个包含60多个表的MySQLInnoDB数据库,我正在创建不同的View,以便在代码中更快速、更轻松地进行动态查询。我对20到28个表的INNERJOINS(没有多对多关系)有几个ViewSELECTING100到120columnswithrowcountbelow5,000并且它的工作速度很快。实际问题我正在创建一个包含34​​个表的INNERJOINS(没有多对多关系)的主视图,并使用行数选择150列低于5,000似乎太多了。执行单个SELECT需要很长时间。我想知道我是否达到了某种View大小限制,是否有任何方法可以增加它,或者有什么技巧可以帮助我突破这个明显的

mysql - 我的 SQL 错误 #1015 - 无法锁定文件 (errno : 165 - Table is read only) innodb engine only

我的SQL错误#1015-Can'tlockfile(errno:165-Tableisreadonly)仅限innodb引擎首先MySql开始停止工作,几乎每天都需要重启然后它开始以只读模式工作MySQL版本是5.6my.cnf内容[mysqld]innodb_file_per_table=1default-storage-engine=MyISAMmax_allowed_packet=268435456innodb_buffer_pool_size=134217728innodb_force_recovery=4我的日志14081905:48:57mysqld_safemysqld

MySQL InnoDB "SELECT FOR UPDATE"- 跳过锁定等效

当我们在MySQL中使用InnoDB表进行“SELECTFORUPDATE”时,有什么方法可以跳过“锁定的行”吗?例如:航站楼t1mysql>starttransaction;QueryOK,0rowsaffected(0.00sec)mysql>selectidfrommytableORDERBYidASClimit5forupdate;+-------+|id|+-------+|1||15||30217||30218||30643|+-------+5rowsinset(0.00sec)mysql>同时,终端t2:mysql>starttransaction;QueryOK,0r

php - 如何锁定 InnoDB 表中的行?

我是一个新的MySQL用户。我创建了一个InnoDB数据库系统。在我的例子中,如果使用selectforupdate,我需要锁定行。但是,即使我进行了很多搜索,我还是不明白如果该行由一个用户加载,如何为所有用户锁定该行。我使用php连接mySQL数据库。你能帮我解决这个问题吗? 最佳答案 MySQL会自动为您进行行锁定。应该没有必要自己进行行锁定。但是如果您坚持这样做,您可以使用select...forupdate。请参阅:http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-r

mysql - 在 MySQL (InnoDB) 中锁定多行

要在MySQL中锁定两行,我应该使用:SELECT*FROMWHEREid=?ORid=?FORUPDATE;或者:SELECT*FROMWHEREid=?ANDid=?FORUPDATE;我显然在交易中,只是不确定它应该是AND还是OR? 最佳答案 如果您的WHERE子句是id=1ANDid=2,则没有行符合包含在结果集中的条件,因此不会锁定任何行。要锁定两行,您需要使用id=1ORid=2,这样两行都将包含在结果集中并被锁定。 关于mysql-在MySQL(InnoDB)中锁定多行,

MySQL:Grant Privileges followed by Flush Privileges 没有效果,没有错误(以 root 身份登录)

我和一名团队成员都被难住了,因为向远程用户授予权限的命令失败了,但没有错误。使用CREATEUSER已成功将新用户添加到mysql.user,但GRANTPRIVILEGES后跟FLUSHPRIVILEGES不会影响授权表。这两个命令都应该说“查询正常”。0行受影响,'他们这样做了。但是SHOWGRANTS并没有显示新的权限,我们也不能从指定的远程ip使用该用户名登录。谁能解释以下行为?mysql>SELECTCURRENT_USER();///I'mdefinitelyinasrootuser+----------------+|CURRENT_USER()|+-----------