Questions tagged «innodb»

InnoDB:MySQL的符合ACID的存储引擎

2
如何配置MySQL Innodb每小时处理1000次插入?
我的网站访问量很高,每小时可能会插入数千条新记录。 这个错误使网站瘫痪: PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: INSERT INTO {location_instance} (nid, vid, uid, genid, lid) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4); Array ( [:db_insert_placeholder_0] => 1059 [:db_insert_placeholder_1] => 1059 [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => cck:field_item_location:1059 [:db_insert_placeholder_4] => 1000 ) 如果MySQL无法处理这种类型的负载,我将感到非常惊讶。那么,我的问题是,这是数据库问题吗?如何配置MySQL以处理这么大的流量? …

4
如何在具有16 GB RAM的QuadCore机器上充分利用MySQL?
我正在工作站上运行MySQL 5.5服务器以进行科学数据分析,并想知道如何配置MySQL以便从性能方面获得最大收益。我通常运行的查询类型涉及10-20个表的联接,并且可以运行很长时间,一到几分钟也不例外。只有极少数用户同时访问数据库(最多5个用户)。我将服务器从具有2.2 GHz双核和4 GB RAM的Lenovo Thinkpad T61移到了以下具有手动选择组件的全新机器上: Intel i7 3770,4x 3.4 GHz(以4x3.7 GHz运行) Z77芯片组 16 GB DDR3 1600 RAM Windows 7 Prof 64位 Windows和MySQL服务器在Intel 520系列SSD驱动器上运行。 首次测试(在两台计算机上运行相同的查询)显示了新测试的速度有了明显的提高,但是查询仍然需要很多时间,我期望会有更多的提升。所讨论的查询已得到很好的优化,即所有表都具有适当的键,这些键也从“解释扩展”开始使用。 现在回到我当前的MySQL设置:首先,我应该提到很久以前我从MyISAM迁移到Innodb。 我的my.ini进行了一些调整(即偏离默认设置): # Maximum size for internal (in-memory) temporary tables. If a table # grows larger than this value, it is automatically converted to …

3
如何在InnoDB引擎中使用插入延迟,并减少插入语句的连接?
我正在开发一个涉及大量数据库写入,大约70%插入和30%读取的应用程序。这个比率还将包括我认为是一次读取和一次写入的更新。通过插入语句,多个客户端通过以下插入语句将数据插入数据库: $mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)"); 问题是我应该使用insert_delay还是使用mysqli_multi_query机制,因为insert语句使用服务器上的〜100%cpu。我在数据库上使用InnoDB引擎,因此无法进行延迟插入。在服务器上的插入速度为〜36k / hr,读取率为99.89%,我也使用select语句在单个查询中检索了7次数据,该查询在服务器上执行需要150秒。我可以使用哪种技术或机制执行此任务?我的服务器内存为2 GB,我应该扩展内存吗?看看这个问题,任何建议都会感激我。 表的结构: +-----------------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user | …

2
在Debian上对单个MySQL查询使用多个内核
我正在将MySQL服务器运行在Debian作为来宾OS的VM(VMWare)上进行测试。来宾系统具有四个模拟的CPU内核,因此我将thread_concurrency设置为四个。 我正在大型表上进行昂贵的联接,这可能需要花费几分钟,但是我在客户机操作系统上看到,一次只使用一个核心。无论涉及的表使用了什么存储引擎(都已通过MyISAM和InnoDB测试),都会发生这种情况。另外,在执行这些大查询时,整个数据库似乎被阻塞,我无法并行执行任何其他查询。奇怪的是,htop显示,查询的核心在查询运行期间发生了变化! 为什么会这样? 这是来自的相关条目SHOW FULL PROCESSLIST;(没有其他查询): | 153 | root | localhost | pulse_stocks | Query | 50 | Copying to tmp table | SELECT DISTINCT * FROM `pulse_stocks`.`stocks` sto, `pulse_new`.`security` sec WHERE (sto.excntry = sec.excntry AND sto.stock_id = sec.ibtic) OR ( sto.isin = sec.isin AND sto.isin <> "" AND …

1
在繁忙的主从复制系统上恢复单个mysql数据库
在繁忙的复制系统中寻找一种策略或工具来将单个数据库恢复到某个时间点。 我有12个数据库以主从复制配置在2个MySQL 5.0.77服务器上运行。每天对只读从属服务器进行一次完全转储,并且有可用的增量SQL转储,这些备份不在现场并监视复制状态。 编辑:表是InnoDB和myISAM的混合,因此引擎特定的解决方案不可用。 因此,考虑到主服务器完全故障,我可以中断复制并升级从服务器,也可以选择重建新服务器并从越过FULL备份进行配置,然后应用每小时从从服务器获取的差异。 但是,我担心如何处理部分故障或单个数据库的故障。我可以想到两种可能的情况; 例如,数据库7损坏,继续处理一些请求,直到有人注意到它已损坏,或者来自日志文件的警报... 某些查询,例如放置数据库,放置表,“更新位置...”类型的查询,将使单个数据库或其中的某些子集失效。 目前,我有一堆完整的转储文件,例如FULL- $ DATE-all-databases.sql.gz文件,以及可以应用于DIFF- $ DATE-all-databases.sql.gz的差异文件 要将数据库7恢复到某个时间点,将需要通过FULL和DIFF文件进行grep,并手动应用该sql。 为了使能够恢复到以前的DIFF转储到master数据库之一的状态,我应该如何进行? 我是否需要备份到单个数据库文件,即 mysqldump --databases "database1" | gzip > database1.sql.gz mysqldump --databases "database2" | gzip > database2.sql.gz mysqldump --databases "database3" | gzip > database3.sql.gz 而不是.. mysqldump --master-data --lock--all-databases --all-databases | gzip > all-databases.sql.gz 如果我要查找单独的mysqldump文件,那么主数据二进制日志会如何处理,我甚至应该为主服务器恢复转储设置--master-data吗?

2
MySQL 5.1 InnoDB配置/ 24GB RAM-双至强高负载
我正在运行一个Facebook应用程序,该应用程序目前有300-600个并发用户(并且还在不断增长)。为了使硬件为增长做好准备,我将i7 / 12gb ram / 2x 80g intel x25 ssd(debian 5.0 / mysql 5.0 / 64bit)更改为bi-xeon / 24gb ram / 2x 120gb intel 320 ssd(ubuntu 10.10 / mysql 5.1 / 64位)。 现在我面临的问题是,性能要比“小盒子”差。在两台服务器上,我一直在使用nginx / php fcgi来提供内容。 我只使用innodb,读/写大约65%/ 35%。大约800-1000 qps,但是所有查询都很简单,永远不会加入超过1个额外的表。所有索引均已设置,并且慢速日志(> 2s)中不会记录任何查询。目前,我大约有400mb的数据(带索引的数据约为1gb),期望它每月增加一倍。 我很喜欢每个可以给我一个提示的人,告诉他们应该进行哪些更改以使其运行更加流畅。 i7机顶盒上的旧配置是这样的(混合myisam / innodb),最多可容纳800多个用户。 旧的my.cnf key_buffer = 3000M max_allowed_packet = 128M …

2
无法解释的InnoDB超时
我最近看到一些非常基本的更新超时,并且无法确定原因。一个例子: //#查询时间:51锁定时间:0已发送的行数:0已检查的行数:0 UPDATE photos SET position = position + 1 WHERE (photo_album_id = 40470); 同一日志中没有Lock_time> 0的条目。运行show innodb status也不会显示任何相关的锁。根据我的应用服务器日志(显示Mysql::Error: Lock wait timeout exceeded与mysql-slow日志中的每个对应条目相关的错误),此问题似乎正在影响至少5个不同的表。 有什么想法从这里去吗?我四面八方。谢谢。 编辑: 创建表`照片`( `id` int(11)NOT NULL auto_increment, `type` varchar(255)NOT NULL, `photo_album_id` int(11)非空, `user_id` int(11)NOT NULL, `title` varchar(255)默认为'Untitled', `description`文字, `credit` varchar(255)默认为NULL, photo_file_name varchar(255)默认为NULL, `photo_content_type` varchar(255)默认为NULL, `photo_file_size` int(11)默认为NULL, `photo_updated_at`日期时间默认为NULL, `position` …

1
MySQL InnoDB死锁,用于2个简单的插入查询
对于这两个插入查询,我有一个死锁: insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.596', 180, 4, 181, 561) insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.611', 180, 4, 181, 563) 这是InnoDB状态: ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2014-12-23 15:47:11 1f4c *** (1) TRANSACTION: TRANSACTION 19896526, ACTIVE …
10 mysql  innodb  deadlock 

4
显示表名+ mysql innodb数据库中每个表的记录数
如何列出当前数据库中的所有表以及表的行数。 换句话说,您能想到在mysql中提出类似查询的查询吗? +------------------------++------------------------+ | Tables_in_database | Number of rows | +------------------------++------------------------+ | database 1 | 1000 | | database 2 | 1500 | +------------------------++------------------------+ 欢迎使用不同的方法。
10 mysql  innodb  select  count 

3
从.ibd,.frm和mysqllogbin文件还原MySQL表
由于某种原因,当我尝试打开存储在其中的表.frm和.ibd文件(无论是在MySQL还是phpmyadmin上)时,它给了我一个语法错误,或者说它不存在。 我读过另一篇与此有类似问题的文章,但是我不知道如何检查是否innodb_file_per_table已启用,并且总体上我真的很困惑。我还将mysql-bin.000002文件的副本转换为txt文件,因此我发现数据库中的数据并未完全丢失。 该数据库是去年创建的。我有6个mysql-bin.00000文件,但由于某种原因,.000002它是最大的。现在,我拥有所有数据库的.ibd和.frm文件,但是对于如何将其还原回MySQL或至少还原为我可以读取的内容,我感到困惑。 我在Windows 2003 Server上使用WampServer 2.4和MySQL 5.6.12。另外,我应该在InnoDB中下载插件吗?

3
mysqldump --single-transaction,但是更新查询正在等待备份
如果我使用mysqldump --single-transaction,根据文档,它应该使用读锁刷新表以获取一致的状态,然后启动事务,并且没有编写者在等待。 但是,昨晚我遇到了以下情况: 摘录自show full processlist: 数百个... Command: Query Time: 291 State: Waiting for table flush Info: insert into db_external_notification..... 然后这个: Command: Query Time: 1204 State: Sending data Info: SELECT /*!40001 SQL_NO_CACHE */ * FROM `db_external_notification` 其余线程处于睡眠状态 有谁知道这些插入物还在等什么?我没有看到任何FLUSH表或DDL或手册中提到的任何可能导致查询等待的内容。 完整的mysqldump命令 mysqldump --quick --add-drop-table --single-transaction --master-data=2 -uxx -pxx dbname 我想--quick在这里是多余的,可能是以前的遗留物,这个脚本很旧,但也不会给您带来任何伤害

3
大批量插入速度
在我的应用程序中,我的INSERT似乎花费了大量时间。我有大量的对象(〜40-50,000)要插入表中。 让我们拿一个样品表 CREATE TABLE bill ( id BIGINT(20) PRIMARY KEY, amount INT(11) DEFAULT 0, bill_date DATETIME DEFAULT NOW(), INDEX (bill_date) ) ENGINE=InnoDB 以3行作为我的批处理大小,以下是我可以想到的插入方法 方法1-构造并击发3个原始插件 INSERT INTO bill (amount, bill_date) VALUES (10, '2012-01-01 00:00:00'); INSERT INTO bill (amount, bill_date) VALUES (20, '2012-01-02 00:00:00'); INSERT INTO bill (amount, bill_date) VALUES (40, '2013-02-05 …
10 mysql  innodb  insert  java  jdbc 

1
InnoDB:由于缺少MLOG_CHECKPOINT而忽略重做日志
我正在使用mysql版本5.7.14(在OS X El Capitan上进行自制安装)。当mysql运行时,我的系统无法正常关闭;当我尝试启动mysql守护程序时,重新启动后,出现以下错误。 2017-02-07T10:11:42.224506Z 0 [Note] mysqld (mysqld 5.7.14) starting as process 18234 ... 2017-02-07T10:11:42.227375Z 0 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive 2017-02-07T10:11:42.228809Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 2017-02-07T10:11:42.228821Z 0 [Note] InnoDB: Uses event mutexes 2017-02-07T10:11:42.228826Z 0 [Note] InnoDB: …

3
批量删除后,我需要重新索引mysql表吗?
我在MySQL中有一张表,每秒钟都有很多INSERT和SELECT。每天都会一次删除一些较旧的数据。删除后是否需要重新索引表?我想提高性能。有人可以建议一些技巧吗?使用“ innodb”作为存储引擎。我需要更改吗?我认为并发插入和选择更好。请提出您的建议。我需要重新编制索引吗? 提前致谢..

1
MySQL:大列的唯一约束
我正在尝试创建一个InnoDB表,该表包含VARCHAR最多可容纳3071个字符的列。我想UNIQUE对该列的数据施加约束。 MySQL似乎使用索引来强制执行约束。在InnoDB中,索引大小似乎被限制为767个字节-不足以VARCHAR(3071)容纳存储数据的列。 关于如何在不影响最大数据长度或使用InnoDB的情况下如何使数据库强制数据唯一性的想法?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.