标签: innodb

我如何处理django中的这种竞争条件?

此代码应该获取或创建一个对象,并在必要时更新它.该代码在网站上正在生产中使用.

在某些情况下 - 当数据库繁忙时 - 它将抛出异常"DoesNotExist:MyObj匹配查询不存在".

# Model:
class MyObj(models.Model):
    thing = models.ForeignKey(Thing)
    owner = models.ForeignKey(User)
    state = models.BooleanField()
    class Meta:
        unique_together = (('thing', 'owner'),)

# Update or create myobj
@transaction.commit_on_success
def create_or_update_myobj(owner, thing, state)
    try:
        myobj, created = MyObj.objects.get_or_create(owner=user,thing=thing)

    except IntegrityError:
        myobj = MyObj.objects.get(owner=user,thing=thing)
        # Will sometimes throw "DoesNotExist: MyObj matching query does not exist"

    myobj.state = state
    myobj.save()
Run Code Online (Sandbox Code Playgroud)

我在ubuntu上使用innodb mysql数据库.

我该如何安全地处理这个问题?

django innodb

28
推荐指数
1
解决办法
8932
查看次数

如何使用索引优化InnoDB上的COUNT(*)性能

我有一个很大但很窄的InnoDB表,记录大约9米.在桌子上count(*)count(id)桌子上做的非常慢(6秒以上):

DROP TABLE IF EXISTS `perf2`;

CREATE TABLE `perf2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `channel_id` int(11) DEFAULT NULL,
  `timestamp` bigint(20) NOT NULL,
  `value` double NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ts_uniq` (`channel_id`,`timestamp`),
  KEY `IDX_CHANNEL_ID` (`channel_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

RESET QUERY CACHE;
SELECT COUNT(*) FROM perf2;
Run Code Online (Sandbox Code Playgroud)

虽然声明不经常运行,但优化它会很好.根据http://www.cloudspace.com/blog/2009/08/06/fast-mysql-innodb-count-really-fast/,这可以通过强制InnoDB使用索引来实现:

SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY);
Run Code Online (Sandbox Code Playgroud)

解释计划似乎很好:

id  select_type table   type    possible_keys   key     key_len ref     rows    Extra
1   SIMPLE      perf2   index   NULL            PRIMARY 4 …
Run Code Online (Sandbox Code Playgroud)

mysql innodb

26
推荐指数
3
解决办法
4万
查看次数

如何做一个快速但空洞的InnoDB行数?

PHPMyAdmin中的常见问题是这样说的关于InnoDB的它的大致行数:

phpMyAdmin使用快速方法来获取行计数,并且此方法仅返回InnoDB表的大致计数.

我想使用这种"快速方法" - 但我搜索的每个地方似乎都有不同的答案.

有人知道吗?

mysql innodb count

25
推荐指数
1
解决办法
7406
查看次数

未知的表引擎'InnoDB'

最近,我发现如果我有好的硬件,我可以最大化mysql性能.由于我一直在使用InnoDB,我在my.ini中添加了额外的配置

这是新添加的配置:

innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 2G
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 120
Run Code Online (Sandbox Code Playgroud)

然后我重新启动所有服务.但是当我使用我的程序时,出现错误"未知的表引擎'InnoDB'".

我试图解决这个问题:

  1. 我删除日志文件重启服务但我仍然得到错误.

mysql innodb

24
推荐指数
4
解决办法
8万
查看次数

xtradb vs innodb

我被要求检查Mariadb,因为Centos暂时不提供MySQL 5.5.我已经读过xtradb服务器作为innodb的一个下降.

使用一个或另一个有什么好处,因为如果它们相同,它们就不会被称为同名?

你认为我应该转向Mariadb吗?由于更新(如果有的话),我将来可能遇到什么样的问题.

我知道MySQL的创始人是Mariadb的后盾,Oracle现在正在管理MySQL.作为一个棘手的决定似乎有点棘手.

提前感谢您的意见,

更新,我问这里的问题,因为谷歌没有显示任何最近的更新.只有一些旧的比较在2012年之前发布

mysql database innodb xtradb mariadb

24
推荐指数
1
解决办法
3万
查看次数

删除的行占用的空间是否会被重用?

我已经多次读过你在MySQL中的InnoDB表中删除一行后,它的空间没有被重用,所以如果你把很多INSERT放到一个表中然后定期删除一些行,那么表将使用越来越多的空间磁盘,好像根本没有删除行.

最近我被告知,删除行占用的空间会被重用,但只有在某些事务完成后才会被重新使用 - 不完全.我现在很困惑.

有人可以帮我理解这个吗?我需要在InnoDB表中执行大量的INSERT,然后每隔X分钟我需要删除超过Y分钟的记录.我在这里有一个不断增长的InnoDB表的问题,还是偏执狂?

mysql database size innodb rows

23
推荐指数
1
解决办法
9661
查看次数

如何在mysql中启用INNODB

当我在MySQL中执行查询时,它返回一个错误,指出InnoDB未启用.当我点击存储引擎时,InnoDB被禁用.

如何启用InnoDB?

mysql sql innodb transactions

23
推荐指数
2
解决办法
8万
查看次数

我应该从MySQL迁移到Percona服务器吗?

我一直在MySQL服务器中遇到脏页刷新问题.由于服务器中缺少资源,这会占用大量CPU资源并导致我的网站崩溃.我在数据库中获得了1000万条记录,并将进一步增长.我的表在innodb中运行,从基于事务的站点开始,我需要innodb.将迁移到Percona服务器将删除我的脏页刷新问题.一般来说迁移或坚持使用MySQL会更好吗?

一旦我搬到percona,如果我想恢复到Mysql,我可以将备份从percona恢复到mysql吗?

mysql innodb percona

23
推荐指数
2
解决办法
1万
查看次数

Mysql'从存储引擎收到错误-1'错误

我有一个myism表'test',它包含一些过时的数据,现在我想重新创建表,所有列都相同,只不过我将存储从myism更改为innodb.我用来重新创建表的转储sql如下:

drop table test;
create table test ( ... )
engine=innodb

insert into test(...) values(...)
Run Code Online (Sandbox Code Playgroud)

这就是我收到错误"从存储引擎得到错误-1"的地方,我用Google搜索,大部分结果都集中在损坏的innodb表上.虽然对于我的情况,我认为它没有被破坏,但这只是我在丢弃时遗漏并创建语句的东西.

另一件事是,在执行了上面的sql之后,剩下的用于表测试的是一个名为file.frm的文件,我想innodb表需要运行一些其他东西,但不确定是什么.

我该如何解决这个问题?我可能需要做更多这类任务,什么是放弃神话表并将其重新创建为innodb的正确程序?

谢谢.

mysql innodb

23
推荐指数
3
解决办法
4万
查看次数

MySQL:在"查询结束"步骤上挂起的更新/插入/删除查询非常慢

我有一个庞大而繁重的mysql数据库,有时执行速度非常快,但有时会变得非常慢.所有表都是InnoDB,服务器有32GB的RAM,数据库大小约为40GB.

前20个查询我slow_query_logARE update,insert以及delete查询和我不明白他们为什么这么慢(长达120秒,有时!)

这是最常见的查询:

UPDATE comment_fallows set comment_cnt_new = 0 WHERE user_id = 1;
Run Code Online (Sandbox Code Playgroud)

分析结果:

mysql> set profiling = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> update comment_fallows set comment_cnt_new = 0 where user_id = 1;
Query OK, 0 rows affected (2.77 sec)
Rows matched: 18  Changed: 0  Warnings: 0

mysql> show profile for query 1;
+---------------------------+----------+
| Status                    | Duration |
+---------------------------+----------+
| starting …
Run Code Online (Sandbox Code Playgroud)

mysql performance replication innodb

23
推荐指数
2
解决办法
3万
查看次数