标签: innodb

MySQL InnoDB锁定连接的行

"SELECT ... FOR UPDATE"锁是否在MySQL中加入了行?

如果是这样,是否可以禁用此行为?

文档中没有任何相关内容.我已经看到Oracle支持"SELECT ... FOR UPDATE OF table_name"table_name是主表或者受影响的行将被锁定的连接表之一,但我从来没有在MySQL的上下文中看到这一点.

mysql innodb transactions join locks

12
推荐指数
2
解决办法
5867
查看次数

创建索引需要很长时间

大约2个月前,我将EnWikipedia数据(http://dumps.wikimedia.org/enwiki/20120211/)导入mysql.

完成导入EnWikipedia数据后,我一直在mysql的EnWikipedia数据库表中创建索引大约2个月.

现在,我已经达到了在"pagelinks"中创建索引的程度.

但是,通过这一点似乎需要无限的时间.

因此,我检查了剩余的时间,以确保我的直觉是正确的.

因此,预计剩余时间为60天(假设我从头开始再次在"pagelinks"中创建索引.)

My EnWikipedia database has 7 tables: 
"categorylinks"(records: 60 mil, size: 23.5 GiB), 
"langlinks"(records: 15 mil, size: 1.5 GiB), 
"page"(records: 26 mil, size 4.9 GiB), 
"pagelinks"(records: 630 mil, size: 56.4 GiB), 
"redirect"(records: 6 mil, size: 327.8 MiB), 
"revision"(records: 26 mil, size: 4.6 GiB) and "text"(records: 26 mil, size: 60.8 GiB).
Run Code Online (Sandbox Code Playgroud)

我的服务器是...... Linux版本2.6.32-5-amd64(Debian 2.6.32-39),内存16GB,2.39Ghz Intel 4核心

创造指数需要这么长时间的常见现象吗?有没有人有更好的解决方案来更快地创建索引?

提前致谢 !


PS:我做了以下操作来检查剩余时间.

参考文献(对不起,以下页面用日文写成):http://d.hatena.ne.jp/sh2/20110615

1.我在"pagelink"中有记录.

 mysql> select count(*) from pagelinks;
 +-----------+ 
 | count(*)  |
 +-----------+ 
 | …
Run Code Online (Sandbox Code Playgroud)

mysql innodb

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

如果那么Mysql触发器那么

我的存储是INNODB,我试图在IF语句中创建一个带有2个查询的触发器.向下你可以看到给我错误的触发器

delimiter |
CREATE TRIGGER count_delete_videos BEFORE DELETE ON videos
  FOR EACH ROW BEGIN
    UPDATE counts SET count = count - 1 WHERE name = 'all';

    IF OLD.published = 1 THEN
        DELETE FROM videos_categories WHERE id_video = OLD.id;
        DELETE FROM videos_tags WHERE id_video = OLD.id;
    END IF;
  END;
|
delimiter ;

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= OLD.id;
    END IF; …
Run Code Online (Sandbox Code Playgroud)

mysql triggers innodb if-statement

12
推荐指数
1
解决办法
6万
查看次数

InnoDB瓶颈:放宽ACID以提高性能

在注意到我们的数据库已成为我们的实时生产系统的主要瓶颈后,我决定构建一个简单的基准来解决问题的根源.

基准测试:我计算在InnoDB表中增加相同行3000次所需的时间,其中行由其主键索引,并且正在更新的列不是任何索引的一部分.我使用在远程计算机上运行的20个并发客户端执行这3000次更新,每个客户端都有自己与数据库的单独连接.

我有兴趣了解为什么我对基准测试的不同存储引擎InnoDB,MyISAM和MEMORY拥有他们所做的配置文件.我也希望明白为什么InnoDB相比之差很大.

InnoDB(20个并发客户端):每次更新需要0.175秒.所有更新都在6.68s之后完成.

MyISAM(20个并发客户端):每次更新需要0.003秒.所有更新都在0.85秒后完成.

内存(20个并发客户端):每次更新需要0.0019秒.所有更新都在0.80秒后完成.

考虑到并发可能导致此行为,我还对单个客户端进行基准测试,并按顺序执行100次更新.

InnoDB:每次更新需要0.0026秒.

MyISAM:每次更新需要0.0006秒.

内存:每次更新需要0.0005秒.

实际的机器是Amazon RDS实例(http://aws.amazon.com/rds/),主要是默认配置.

我猜测答案将沿着以下几行:每次更新后InnoDB fsyncs(因为每次更新都是符合ACID的事务),而MyISAM则没有,因为它甚至不支持事务.MyISAM可能正在内存中执行所有更新,并定期刷新到磁盘,这是它的速度接近MEMORY存储引擎的方式.如果是这样,有没有办法使用InnoDB进行事务支持,但是可能会放松一些约束(通过配置),以便以一些持久性为代价更快地完成写入?

此外,任何有关如何提高InnoDB的性能的建议随着客户数量的增加而增加?它显然比其他存储引擎更糟糕.

更新

我找到了https://blogs.oracle.com/MySQL/entry/comparing_innodb_to_myisam_performance,这正是我想要的.设置innodb-flush-log-at-trx-commit = 2允许我们在出现电源故障或服务器崩溃的情况下放松ACID约束(每秒刷新一次磁盘).这给了我们与MyISAM类似的行为,但我们仍然可以从InnoDB中提供的事务功能中受益.

运行相同的基准测试,我们发现写入性能提高了10倍.

InnoDB(20个并发客户端):每次更新需要0.017秒.所有更新都在0.98秒后完成.

还有其他建议吗?

mysql myisam innodb database-performance

12
推荐指数
2
解决办法
5284
查看次数

尝试从memcached检索过期对象时出错

我正在尝试学习如何在MySQL 5.6中使用memcached插件.我使用telnet获取并设置值为memcached.当我尝试从memcache获取过期值时,它会显示"连接被外部主机关闭".更多详情如下:

数据库名称:test

表名:demo

我的表格说明

+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| c1    | varchar(32)         | NO   | PRI | NULL    |       |
| c21   | varchar(1024)       | YES  |     | NULL    |       |
| c22   | varchar(1024)       | YES  |     | NULL    |       |
| c3    | int(11)             | YES  |     | NULL    |       |
| c4    | bigint(20) unsigned | YES  |     | NULL    |       |
| …
Run Code Online (Sandbox Code Playgroud)

mysql memcached innodb

12
推荐指数
1
解决办法
508
查看次数

MySQL错误:最大列大小为767字节

当我运行一个与MySQL有关的程序时,我收到了以下错误消息:

2015-06-10 15:41:12,250 ERROR app.wsutils 419 INCRON:错误:('HY000','[HY000] [MySQL] [ODBC 5.2(w)驱动程序] [mysqld-5.7.7-rc-log]索引列大小太大.最大列大小为767字节.(1709)(SQLExecDirectW)')

我用Google搜索了一下,发现此错误可能与该innodb_large_prefix选项有关.但是,我使用的是MySQL 5.7.7 rc,它已经设置innodb_large_prefix为"ON"(在MySQL Workbench中检查),允许最多3072个字节.我不确定这是不是问题innodb_large_prefix.

无论如何,有没有人知道如何解决这个问题?

mysql database size innodb mysql-workbench

12
推荐指数
7
解决办法
5万
查看次数

phpMyAdmin外键下拉字段值

我正在使用phpmyadmin(php&mysql),我在使用外键链接表时遇到了很多麻烦.

我得到了该字段的负值countyId(这是外键).然而,它链接到我的其他表罚款,它的级联很好.

当我去添加数据时,会有一个下拉框,CountyId值看起来像这样,

-1

1-
Run Code Online (Sandbox Code Playgroud)

这是我的修改声明:

ALTER TABLE Baronies
ADD FOREIGN KEY (CountyId)
REFERENCES Counties (CountyId)
ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)

php mysql innodb foreign-keys phpmyadmin

11
推荐指数
3
解决办法
9563
查看次数

我应该为我的MySQL数据库使用MyISAM或InnoDB表吗?

我的数据库中有以下两个表(索引完整,因为它将基于我使用的引擎):

表格1:

CREATE TABLE `primary_images` (
  `imgId` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `imgTitle` varchar(255) DEFAULT NULL,
  `view` varchar(45) DEFAULT NULL,
  `secondary` enum('true','false') NOT NULL DEFAULT 'false',
  `imgURL` varchar(255) DEFAULT NULL,
  `imgWidth` smallint(6) DEFAULT NULL,
  `imgHeight` smallint(6) DEFAULT NULL,
  `imgDate` datetime DEFAULT NULL,
  `imgClass` enum('jeans','t-shirts','shoes','dress_shirts') DEFAULT NULL,
  `imgFamily` enum('boss','lacoste','tr') DEFAULT NULL,
  `imgGender` enum('mens','womens') NOT NULL DEFAULT 'mens',
  PRIMARY KEY (`imgId`),
  UNIQUE KEY `imgDate` (`imgDate`)
)
Run Code Online (Sandbox Code Playgroud)

表2:

CREATE TABLE `secondary_images` (
  `imgId` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `primaryId` smallint(6) unsigned …
Run Code Online (Sandbox Code Playgroud)

mysql database database-design myisam innodb

11
推荐指数
1
解决办法
7369
查看次数

在InnoDB中'更新令牌设置tokens = tokens + 1'原子?

不使用显式事务,是:

update tokens set tokens = tokens + 1
Run Code Online (Sandbox Code Playgroud)

保证在InnoDB中是原子的吗?

mysql innodb thread-safety atomicity

11
推荐指数
1
解决办法
1841
查看次数

试图理解InnoDB表上的MySQL死锁

我试图理解MySQL在同一个表上的并发客户端处理期间发现的死锁.这是"SHOW InnoDB STATUS"命令的有趣部分:

------------------------
LATEST DETECTED DEADLOCK
------------------------
120704 16:17:51
*** (1) TRANSACTION:
TRANSACTION 0 3547576, ACTIVE 0 sec, process no 10886, OS thread id 140547111458560 inserting
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 368, 1 row lock(s), undo log entries 1
MySQL thread id 41941, query id 1725666 localhost testsuite update
insert into `INode` (`status`,`_type`,`group`,`ctime`,`parent`,`shared`,`basename`,`_rowid`,`displayname`,`user`,`content_type`,`mtime`,`position`,`atime`,`size`) values ('Published','Group','12','2012-07-04 16:17:48.996869','2',null,'1','12','1','3','application/x-empty','2012-07-04 16:17:48.996896','1','2012-07-04 16:17:48.996914',null)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space …
Run Code Online (Sandbox Code Playgroud)

mysql innodb transactions database-deadlocks

11
推荐指数
1
解决办法
3956
查看次数