标签: innodb

如何提高 MySQL INSERT 和 UPDATE 性能?

这个问题也可能在 StackOverflow 上被问到,但我会先在这里尝试......

我们数据库中 INSERT 和 UPDATE 语句的性能似乎正在降低并导致我们的 Web 应用程序性能不佳。

表是 InnoDB 并且应用程序使用事务。是否有任何简单的调整可以加快速度?

我想我们可能会看到一些锁定问题,我怎样才能找到?

mysql performance innodb

15
推荐指数
3
解决办法
5万
查看次数

将所有表从 InnoDB 转换为 MyISAM 的更简单方法

以前,我使用这个:

USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
Run Code Online (Sandbox Code Playgroud)

我正在寻找更简单的方法来转换数据库中的所有表,而不是一个一个地写每个表名

mysql innodb myisam

13
推荐指数
2
解决办法
4万
查看次数

如何禁用 MySQL InnoDB 表中的键?

是否可以禁用 InnoDB 表中的键?

如果是,如何?

如果不是,为什么?

mysql optimization innodb database

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

在 MySQL/InnoDB 中为事务设置时间限制

这源于这个相关的问题,我想知道如何在一个微不足道的情况下强制两个事务按顺序发生(两个事务都只在一行上运行)。我得到了一个答案——SELECT ... FOR UPDATE用作两个事务的第一行——但这会导致一个问题:如果第一个事务从未提交或回滚,那么第二个事务将被无限期阻塞。innodb_lock_wait_timeout变量设置了尝试进行第二次事务的客户端将被告知“对不起,再试一次”的秒数……但据我所知,他们会再试一次,直到下一次服务器重新启动。所以:

  1. ROLLBACK如果交易永远持续下去,肯定有一种方法可以强制执行吗?我是否必须使用守护进程来终止此类事务,如果是这样,那么这样的守护进程会是什么样子?
  2. 如果连接被事务杀死wait_timeoutinteractive_timeout在事务中途终止,事务是否回滚?有没有办法从控制台测试这个?

说明innodb_lock_wait_timeout设置事务在放弃之前等待锁被释放的秒数;我想要的是一种强制释放锁的方法

更新 1:这是一个简单的例子,说明为什么innodb_lock_wait_timeout不足以确保第二个事务不被第一个阻塞:

START TRANSACTION;
SELECT SLEEP(55);
COMMIT;
Run Code Online (Sandbox Code Playgroud)

使用默认设置innodb_lock_wait_timeout = 50,此事务在 55 秒后无错误地完成。如果您UPDATE在该SLEEP行之前添加一个,然后从另一个尝试SELECT ... FOR UPDATE同一行的客户端发起第二个事务,那么超时的是第二个事务,而不是睡着的那个。

我正在寻找的是一种强制结束这笔交易的宁静沉睡的方法。

更新 2:为了回应 hobodave 对上述示例的真实性的担忧,这里有一个替代方案:DBA 连接到实时服务器并运行

START TRANSACTION
SELECT ... FOR UPDATE
Run Code Online (Sandbox Code Playgroud)

其中第二行锁定了应用程序经常写入的一行。然后 DBA 被打断走开,忘记结束事务。应用程序会停止,直到行被解锁。我想尽量减少应用程序因这个错误而卡住的时间。

mysql innodb

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

增加 InnoDB 缓冲池大小

我在为 MySql InnoDB 设置缓冲池大小和日志文件大小时遇到​​困难。我远非 MySql 专家,但一直在阅读,似乎要改变这一点,我只需将这些行添加到我的 /etc/mysql/my.cnf

# Set buffer pool size to 50-80% of your computer's memory
innodb_buffer_pool_size=2048M
innodb_additional_mem_pool_size=512M
#
# Set the log file size to about 25% of the buffer pool size
innodb_log_file_size=256M
innodb_log_buffer_size=128M
Run Code Online (Sandbox Code Playgroud)

该服务器有大约 7GB 的内存,并且还运行着一个网络服务器,所以我认为这些数字应该是一个不错的起点。保存并重新启动服务器后,更改似乎并未生效。我尝试运行 Mysqltuner,它报告缓冲池仍为 16.0M。知道我做错了什么吗?如果您想查看更多配置文件,请告诉我。谢谢!

mysql innodb

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

MySQL InnoDB 数据库在选择时“挂起”

我正在尝试修复我们服务器上的 MySQL 配置。我们的应用程序的特点是大量数据存储在单个表中(目前超过 3 亿行)。该表经常用于插入(它们总是出现)。

当我在该表上运行超过几秒钟的选择查询时,所有插入(确切地提交)都在等待表访问,并使我们的应用程序无响应。

据我所知 InnoDB 在 select 运行时不会对表进行任何锁定。为什么选择阻塞表呢?

我试图找到 innotop 的原因,但我不确定如何解释它的输出以及在哪里搜索。告诉我你需要什么,我会在这里发布。

+-----+---------+-----------+--------+---------+------+----------------+-----------------------------------------------------------------------------------------------------------------------------------+
| Id  | User    | Host      | db     | Command | Time | State          | Info                                                                                                                              |
+-----+---------+-----------+--------+---------+------+----------------+-----------------------------------------------------------------------------------------------------------------------------------+
|   1 | root    | localhost | dbname | Query   |   29 | NULL           | COMMIT                                                                                                                            | 
|   2 | root    | localhost | dbname | Query   |   30 | NULL           | COMMIT                                                                                                                            | 
|   4 | root    | localhost | dbname | Query   |   29 | …
Run Code Online (Sandbox Code Playgroud)

mysql innodb blocking

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

在使用 InnoDB 数据库之前我应该​​知道什么?

在使 InnoDB 数据库可用之前,服务器或 DB 管理员应该知道和做些什么。

我正在考虑为innodb_buffer_pool_size和设置正确的值之类的事情innodb_log_file_size

那么,您可能忘记配置哪些简单的事情会导致使用数据库的应用程序无法达到最佳状态?

mysql innodb

10
推荐指数
1
解决办法
4552
查看次数

MySQL:InnoDB:ERROR:最后一个检查点的年龄是X,超过了日志组容量Y?

在生产 MySQL 环境中,以下错误消息/var/log/mysql/error.log每四分钟写入一次:

110723 18:36:02  InnoDB: ERROR: the age of the last checkpoint is 9433856,
InnoDB: which exceeds the log group capacity 9433498.
InnoDB: If you are using big BLOB or TEXT rows, you must set the
InnoDB: combined size of log files at least 10 times bigger than the
InnoDB: largest such row.
Run Code Online (Sandbox Code Playgroud)

我不确定如何解析错误消息。

更具体地说,我不明白检查点的年龄如何与“日志组容量”相关,以及这又如何与具有大BLOB/TEXT列的行的大小相关。

基本上我不知道如何排除故障并继续解决这个问题。我的问题是:

  • 错误信息是什么意思?
  • 我究竟做错了什么?
  • 我该如何解决?

mysql innodb

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

MyISAM 用于数据读取

我有一个大约有 10 亿行的表,它的 98% 是读取密集型的。

我尝试使用不同的存储引擎(MyISAM 和 InnoDB)调整数据库

然后运行了一些测试以查看性能

在 where 子句中,我有一个主键 ID,而且似乎由于 MyISAM Ke​​y Cache 将所有索引存储在其缓冲区中,因此使用 MyISAM 似乎非常快,大约比 InnoDB 快 2 倍

但是对于 InnoDB 来说,它似乎更慢了!!是不是 InnoDB 不使用任何缓冲区来预加载索引?

mysql innodb myisam

10
推荐指数
2
解决办法
836
查看次数

ibdata 文件多大才算太大?

我的ibdata文件很大,至少在我看来是很大的。这是过度还是不那么糟糕?

-rw-rw---- 1 mysql mysql  15G Apr 18 10:11 ibdata1
Run Code Online (Sandbox Code Playgroud)

mysql innodb

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

标签 统计

innodb ×10

mysql ×10

myisam ×2

blocking ×1

database ×1

optimization ×1

performance ×1