MyISAM 和 InnoDB 存储引擎区别及各自使用场景

InnoDB 主要优势

  • 事务支持:事务提交回滚以及错误恢复。
  • 行级锁
  • 聚合索引
  • 外键支持

InnoDB 在 MySQL 5.6.4 后支持全文索引。

MySQL 5.5 后默认存储引擎为InnoDb。

如果不能使用到索引,行级锁会失效。

如何选择两种存储引擎

大量读,几乎没有写请求 和 小于5.6.4版本需要全文索引,选择 MyISAM,其他情况选择InnoDB。

我的性能测试结果,仅供参考

单进程插入10万条记录,MyISAM 1.8348009586334 秒, InnoDB 2.0098528862 秒

6个进程同时各插入10万条记录,MyISAM 3.860533952713 秒, InnoDB 2.9386329650879 秒(每个进程运行时间差不多,文章中给出的是其中一进程的运行时间,下同)

12个进程同时各插入10万条记录,MyISAM 7.4965870380402 秒, InnoDB 5.0007991790771 秒

单进程插入1万条记录,MyISAM 4.3874440193176 秒, InnoDB 3.8677229881287 秒

6个进程同时各插入1万条记录,MyISAM 9.7532279491425 秒, InnoDB 6.4886889457703 秒(平均每个进程运行时间)

12个进程同时各插入1万条记录,MyISAM 22.401536941528 秒, InnoDB 8.3166329860687 秒(平均每个进程运行时间)

12个进程同时主键SELECT1万次,MyISAM 3.3773090839386 秒, InnoDB 3.3466641902924 秒(平均每个进程运行时间)

30个进程同时主键SELECT1万次,MyISAM 8.7141139507294 秒, InnoDB 8.6588280200958 秒(平均每个进程运行时间)

总结:从这个测试结果来看,InnoDB几乎是完胜啊。(结果仅供参考,或许完全没有参考价值,毕竟与真实业务中的查询情况相差巨大)

PHP内存回收原理

每个php变量存在一个叫”zval”的变量容器中。除了包含变量的类型和值,还包括两个字节的额外信息。is_ref 是个bool值,用来标识这个变量是否是属于引用集合(reference set),refcount 用以表示指向这个zval变量容器的变量(也称符号即symbol)个数

refcount 为0时变量从内存中删除。在5.3之前的版本无法处理循环引用的问题。5.3及以后, 在引入新的垃圾回收算法来对付循环引用计数的时候, 作者加入了大量的宏来操作refcount, 为了能让错误更快的显现, 所以改名为refcount__gc, 迫使大家都使用宏来操作refcount。

一个zval在5.3之前版本占用24字节(64位系统,下同),5.3为了解决循环引用的问题,用zval_gc_info劫持了zval的分配,因此5.3到5.6,一个zval实际占用32字节。

从PHP7开始, 对于在zval的value字段中能保存下的值, 就不再对他们进行引用计数了, 而是在拷贝的时候直接赋值, 这样就省掉了大量的引用计数相关的操作, 这部分类型有:IS_LONG、IS_DOUBLE,对于那种根本没有值, 只有类型的类型, 也不需要引用计数了:IS_NULL、IS_FALSE、IS_TRUE。

PHP7的性能,我们并没有引入什么新的技术模式, 不过就是主要来自, 持续不懈的降低内存占用, 提高缓存友好性, 降低执行的指令数的这些原则而来的。

PHP5(v<5.3) zval 结构体定义:

PHP5(5.3<= v < 7) zval 结构体定义:

5.3及以上版本虽然 struct  _zval_struct 结构体的内容没有变(除了 refcount 重命名为 refcount__gc,is_ref 重命名为 is_ref__gc),但是新增的头文件 zend_gc.h 重定义了 ALLOC_ZVAL 宏

zval_gc_info 的定义为

所以实际上5.3及以上版本zval大小为32字节。

PHP7 zval 结构体定义如下

 

关于内存对齐请参考:https://levphy.github.io/2017/03/23/memory-alignment.html

PhpStorm 激活服务器 PhpStorm License Server

下面给出的激活服务器可以激活 JetBrains 系列的所有产品,包括但不限于:PhpStorm AppCode CLion IDEA PyCharm RubyMine WebStorm

http://jetbrains.tencent.click
http://idea.lanyus.com
http://idea.qinxi1992.cn

http://idea.imsxm.com/
http://114.215.133.70:41017/
http://172.245.22.235:1017/
http://mcpmcc.com:1017
http://idea.pjoc.pub

http://idea.goxz.gq/
http://v2mc.net:1017/
http://idea.imsxm.com/
http://idea.ibdyr.com/

作者:伍源辉
链接:http://www.jianshu.com/p/8c49c41603ab
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Yii2 gridview fixed column width 如何设置table宽度固定

其中关键代码是:’style’ => ‘table-layout: fixed;’ 和 ‘options’ => [‘style’ => ‘width:10em’]

线上服务故障紧急处理

 

原版windows xp安装镜像与密钥(包含sp3)

Windows XP Professional(Simplified Chinese)

文件名      CN_WINXP_PRO_ISO.img
SHA1        73800FE8959F40361BAE3A6553CC66D27D78722E
文件大小 505.63MB
发布时间 2001-10-30

Windows XP Professional with Service Pack 3 (x86) – CD VL (Chinese-Simplified)

文件名     zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso
SHA1       D142469D0C3953D8E4A6A490A58052EF52837F0F
文件大小 601.04MB
发布时间 2008-05-02

以上亲测可用!

nginx 去除 url 后面的 hash

 

一次 ping 不通问题排查

线上一台服务器在重启后发现,有些机器无法 ping 通,有些机器可以。

机器情况如下:

问题表现为在 c 机器上,ping b 的 ip,无法 ping 通,tcpdump 在 b 上抓包,有接收到 ping request 包,没有 ping reply 包。

正当我要按 stackoverflow 上的一个答案配置打开 log_martians 这个选项时,想到会不会是 b 的路由表配置问题,运行 ip route 查看路由发现果然。

上述命令添加路由后问题解决。

 

参考:

  1. http://stackoverflow.com/questions/18536796/icmp-request-received-but-doesnt-reply
  2. https://www.cyberciti.biz/faq/linux-log-suspicious-martian-packets-un-routable-source-addresses/
  3. https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-networkscripts-static-routes.html