MySQL 线程模型

MySQL在架构上分为Server层和存储引擎层,它们的线程模型略有不同。在Server层每个连接对应一个线程,几乎没有线程并发控制,只要还可以创建连接,就会创建对应的线程,这些线程之间并发执行。而在InnoDB存储引擎层,为了防止并发线程过多,线程切换开销过大,可以限制并发线程数,从而提高性能。除此以外,MySQL Enterprise版/MariaDB/...

阅读全文

MySQL 优化器导致暴涨案例分析

案例描述 这里记录的是一次线上问题的分析过程,MySQL在执行形如select * from tb WHERE val IN (10, 20, 30) and id IN (1,2,3) and id IN (1,2,3,4,5)类型的SQL时,造成内存暴涨,引发OOM。这个SQL中IN的列表长度可能达到数十万个,而SQL总的长度不超过10M字节。注意到这个...

阅读全文

轻量级网络抓包工具 ngrep

ngrep(network grep)是一款轻量级的网络抓包工具,是一个开源项目,代码托管在SourceForge上。ngrep依赖pcap库和GNU regex库,主要通过命令行接口使用。可以使用源码编译安装,在ubuntu上可以直接使用apt-get安装。 ngrep比tcpdump功能更强的的地方是,从名字也可以看出来,ngrep可以通过正则表达式过滤...

阅读全文

MySQL GTID 原理以及使用

简介 GTID是MySQL 5.6的新特性,其全称是Global Transaction Identifier,可简化MySQL的主从切换以及Failover。GTID用于在binlog中唯一标识一个事务。当事务提交时,MySQL Server在写binlog的时候,会先写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTI...

阅读全文

Moore NIM 必胜策略

问题描述 Moore Nim 也叫 index-k Nim,这个问题由 Moore 在 1910 年提出,是普通 Nim 问题的扩展,问题的描述如下。 总共有 \(n\) 堆石子,每堆石子的个数分别为 \(a_1, a_2, a_3 ... a_n\) ;有 2 个玩家轮流取石子,每次选择 \(k\) 堆石子,从中取任意多个石子,而且至少要取一个石子。取走最...

阅读全文

Poj 3922 解法

题目大意: 有一堆石子总共有\(n\)个,两个玩家轮流去取,每次至少取一个石子。先手玩家在第一次取石子的时候至多取\(n-1\)个,之后每个玩家每次最多只能取他对手上一次取石子的\(k\)倍。 比如某个玩家在某次取走\(q\)个石子,轮到他的对手取石子了,对手最多只能取\(k * q\)个石子。当某个玩家不能取到石子时就输了,对手获胜。 输入 第一行是一个整...

阅读全文

负数进制转换

题目描述 我们都知道每一个整数都可以用十进制来表示,从右往左起,第k个数权重是\(10^k\),比如:9527实际上表示的值是 \[9527=9*10^3+5*10^2+2*10^1+7*10^0\] 我们现在引入负数进制,比如-10进制,在该进制的表示下由于: \[9527=1*(-10)^4+1*(-10)^3+6*(-10)^2+8*(-10)^1+7...

阅读全文