虽然SQL-92规定了四种隔离级别,但是在引入MVCC后,RC/RR都是snapshot isolation下的变体。至于对隔离性和一致性的吐槽,引用沈洵的话:“快照读以更低的代价实现了更高的并发度,却不得不委身在原有事务框架内。其实ACID也只是一个标准,并非真理。” 既然是snapshot isolation,MySQL有什么问题呢,直接上
上周同事问我一个SQL在主库转成ROW格式的binlog发送到备库了,现在要找到这条delete,然而通过mysqlbinlog dump出来发现有“好多条”这个delete 语句,大概如下:#at 219#131203xx server id 1 end_log_pos 219 Table_map: xx mapped to number 35#131203xx server id 1 end_
这篇http://boylook.blog.51cto.com/7934327/1325025提到了sql_safe_update的参数及相关结论,下面从源码上给出比较细节的分析1.在SQL解析时,如果开启这个参数,发现谓词为空则抛异常:if ((thd->variables.option_bits & OPTION_SAFE_UPDATES) && !select_
相信各位线上都可能遇到过或者听到过数据被应用程序“误”删,可能因为拼SQL导致谓词为永真删除或者更新了全部数据?或者虚惊一场?因此,面对这种情况我们要能:1.“攻”:如何防止这种情况发生2.“守”:如果发生了怎么办对于“攻”:因为我们是MySQL,主要拿MySQL举例:1.sql_safe_update:当设置为1时对于update:如果谓词没有索引并且没有limit会被拒绝对于delete:如果
接上篇.那么在Server端Cursor是如何实现的呢?Cursor在MySQL-Server side是以内部临时表的形式存在的,将resultSet存储到Memory table或者MyISAM Table内(当resultset>max_heap_table_size ,tmp_table_size时或者memory不支持的字段类型时),因此第一就是临时表是无法控制的,即没办法添加索引
根据http://boylook.blog.51cto.com/7934327/1298634提到MySQL JDBC的fetchsize问题. 在MySQl官方文档里只提到了streaming模式和fetchALL两种模式,那么是不是就没有中间的状态呢?首先是看Java JDBC的API查看setFetchSize:setFetchSize(int rows) Givesthe JDBC d
Count(*)一个“空表”为什么会很慢呢?只有几十行数据为什么select xxx from table limit 1需要300ms?select min(pk) fromtable也会慢?见下例:dba@localhost : test 18:14:32> show create table test_hmw\G*************************** 1. row **
线上MySQl增量ETL由于源表没有last_modified_time(timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP),加起来比较有难度(online ddl虽然有工具,不过这些表是比较核心的表并且超过300GB);因此在从库启用了触发器,来记录PK以及对应的modified_time(记录事务的
在做MySQL升级从5.0.49升级到5.1.68之后,发现QPS翻倍了;在review了所有域的应用之后,结论是应用的QPS基本没变,那这诡异的QPS是哪来的呢?后来发现在5.0的时候querycache是打开的,而升级后由于这个库读写比基本差距不大并且原来的QC命中率低于20%就把QC关了,而querycache hit是不算在com_select里的,因此闹了一个乌龙:)QC hit:
回顾一下线上数据库(5.1.68)的CASE,高峰期的时候出现了大量的thread_running,发现基本上线程处于deadlock状态,涉及到的只有一张表,并且只有一行:table a(`id` smallint(5) unsigned NOT NULL DEFAULT'0',`key` varchar(32) NOT NULL,`value` varchar(32) NOT NULL,`ti
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号