mysql DELAYED 的使用

使用延迟插入操作
DELAYED调节符应用于INSERT和REPLACE语句。
当DELAYED插入操作到达的时候, 服务器把数据行放入一个队列中,并立即给客户端返回一个状态信息,这样客户端就可以在数据表被真正地插入记录之前继续进行操作了。
如果读取者从该数据表中读取数据,队列中的数据就会被保持着,直到没有读取者为止。接着服务器开始插入延迟数据行(delayed-row)队列中的数据行。
在插入操作的同时,服务器还要检查是否有新的读取请求到达和等待。如果有,延迟数据行队列就被挂起,允许读取者继续操作。
当没有读取者的时候,服务器再次开始插入延迟的数据行。
这个过程一直进行,直到队列空了为止。
几点要注意事项:

  1. INSERT DELAYED应该仅用于指定值清单的INSERT语句。服务器忽略用于INSERT DELAYED…SELECT语句的DELAYED。
  2. 服务器忽略用于INSERT DELAYED…ON DUPLICATE UPDATE语句的DELAYED。
  3. 因为在行被插入前,语句立刻返回,所以您不能使用LAST_INSERT_ID()来获取AUTO_INCREMENT值。AUTO_INCREMENT值可能由语句生成。
  4. 对于SELECT语句,DELAYED行不可见,直到这些行确实被插入了为止。
  5. DELAYED在从属复制服务器中被忽略了,因为DELAYED不会在从属服务器中产生与主服务器不一样的数据。
  6. 目前在队列中的各行只保存在存储器中,直到它们被插入到表中为止。这意味着,如果您强行中止了mysqld(例如,使用kill -9) 或者如果mysqld意外停止,则所有没有被写入磁盘的行都会丢失。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,可以使用以下方法查找经常使用的表: 1. 查看表的I/O操作次数:可以使用MySQL的Performance Schema来查看表的I/O操作次数,具体步骤如下: 1)打开Performance Schema:在MySQL中执行`SET GLOBAL performance_schema = ON;` 2)执行以下语句,查看表的I/O操作次数: ``` SELECT (SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_ID = t.TABLE_ID) table_name, sum(t.COUNT_READ) count_read, sum(t.COUNT_WRITE) count_write FROM performance_schema.table_io_waits_summary_by_table t WHERE t.TABLE_SCHEMA = 'your_database_name' GROUP BY t.TABLE_ID ORDER BY sum(t.COUNT_READ + t.COUNT_WRITE) DESC LIMIT 10; ``` 其中,将`your_database_name`替换为你要查询的数据库名。执行以上语句后,输出结果中的前几行即为经常使用的表。 2. 查看表的锁等待次数:可以使用MySQL的Performance Schema来查看表的锁等待次数,具体步骤如下: 1)打开Performance Schema:在MySQL中执行`SET GLOBAL performance_schema = ON;` 2)执行以下语句,查看表的锁等待次数: ``` SELECT (SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_ID = t.TABLE_ID) table_name, sum(t.COUNT_READ_NORMAL + t.COUNT_READ_WITH_SHARED_LOCKS + t.COUNT_READ_HIGH_PRIORITY + t.COUNT_READ_NO_INSERT + t.COUNT_WRITE_ALLOW_WRITE + t.COUNT_WRITE_CONCURRENT_INSERT + t.COUNT_WRITE_DELAYED + t.COUNT_WRITE_NORMAL) count_lock FROM performance_schema.table_lock_waits_summary_by_table t WHERE t.TABLE_SCHEMA = 'your_database_name' GROUP BY t.TABLE_ID ORDER BY sum(t.COUNT_READ_NORMAL + t.COUNT_READ_WITH_SHARED_LOCKS + t.COUNT_READ_HIGH_PRIORITY + t.COUNT_READ_NO_INSERT + t.COUNT_WRITE_ALLOW_WRITE + t.COUNT_WRITE_CONCURRENT_INSERT + t.COUNT_WRITE_DELAYED + t.COUNT_WRITE_NORMAL) DESC LIMIT 10; ``` 其中,将`your_database_name`替换为你要查询的数据库名。执行以上语句后,输出结果中的前几行即为经常使用的表。 通过以上两种方法,可以查找经常使用的表并优化这些表的性能,提高MySQL的查询性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值