• ninuxer
    2019-01-23
    打卡day29
    echo 1>/proc/sys/vm/drop_caches表示释放pagecache,也就是文件缓存,而mysql读书的数据就是文件缓存,dataservice不停的释放文件缓存,就导致MySQL都无法利用磁盘缓存,也就慢了~

    作者回复: 赞,正解

    
     39
  • 大坏狐狸
    2019-02-11
    这个地方因为之前了解过,所以来打个卡,这个算法在高性能mysql里有介绍,叫最优前缀.
    有时候需要索引很长的字符列,这会让索引变得大且慢。通常可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率。但这样也会降低索引的选择性。索引的选择性是指不重复的索引值(也称为基数,cardinality)和数据表的记录总数的比值,范围从1/#T到1之间。索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL在查找时过滤掉更多的行。唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。

    一般情况下某个前缀的选择性也是足够高的,足以满足查询性能。对于BLOB,TEXT,或者很长的VARCHAR类型的列,必须使用前缀索引,因为MySQL不允许索引这些列的完整长度。

    诀窍在于要选择足够长的前缀以保证较高的选择性,同时又不能太长(以便节约空间)。前缀应该足够长,以使得前缀索引的选择性接近于索引的整个列。换句话说,前缀的”基数“应该接近于完整的列的”基数“。
    select count(distinct city)/count(*) from city_demo; 根据这个算出一个比例,然后 count(distinct left(city,3)) 把这个3逐渐的加大,一直到算出来的数值接近上面的比例,这样算出来的前缀索引是性能最好的。
    展开

    作者回复: 赞,谢谢分享详细的前缀选择算法

    
     14
  • 某、人
    2019-01-24
    非常赞,这篇案例很好的展示了怎么从操作系统层面去排查慢查询的问题
    
     8
  • rm -rf 😊ི
    2019-04-04
    有个疑问,老师之前不是说过数据库有自己一套缓存机制吗?为何删除cached也会影响到mysql的读写呢

    作者回复: 数据库的缓存还要看选择了存储引擎,MyISAM不会缓存数据

    
     6
  • 王星旗
    2019-08-20
    老师,请教一个问题啊,既然只是iowait占比高,cpu占比不高,为什么执行其它命令会感觉卡呢?在等待io的时候,CPU不应该去执行其它进程吗?

    作者回复: 执行命令也需要IO操作(比如读目录找到binary,加载命令和依赖的库等等)

    
     2
  • 小老鼠
    2019-01-26
    即停止DataService ,又增加索3引是不是性能会更好?

    作者回复: 是的,利用缓存后性能会更好

    
     1
  • guoew
    2019-01-25
    以前遇到数据库慢的问题都是直接进数据库show processlist ,没有一个循序渐进的过程。感谢老师
    
     1
  • 李逍遥
    2019-01-23
    mysql打开慢查询日志,排查SQL性能问题更方便

    作者回复: 嗯嗯,慢查询推荐总是开启

    
     1
  • tux
    2019-10-21
    回顾阶段,再运行案例,发现总会出两种现象:
    1.卡在 进度条(出现最多)
    root@t-s:mysql-slow:: make run
    ...
    1f212fb371f9: Downloading [==========================> ] 1.137MB/1.27MB
    ...

    2.卡在 Waiting
    root@t-s:mysql-slow:: make run
    ...
    44fa5ea1d96b: Waiting
    ...


    此篇,从上周到这周,没有make run成功过。
    I/0性能篇,抛开此篇,其它篇需要docker run好几次,才能运行案例。

    是个例吗?
    展开

    作者回复: 默认的镜像是从dockerhub上面拉下来的,有时候可能会比较慢,可以试试通过代理访问

    
    
  • 辉晖
    2019-09-20
    mysql进程每秒写入8M/S,until接近100%,iowait有40%。可是反复运行show full processlist;一直查不到耗时长(除了Sleep)的语句,要怎么排查?
    
    
  • 烨
    2019-08-21
    之前运行make init的时候,会报错连不上本地数据库,后来发现是因为mysql还没启动好,app就已经启动了,所以一直连不上。将app重启一次就好了

    作者回复: 谢谢分享您的步骤,可能是有的环境mysql初始化比较慢

    
    
  • 一想再想N
    2019-08-05
    可以把不走索引的查询记录到日志中去
    
    
  • 西瓜就咸菜
    2019-07-08
    我把insert条数增大到1000000,curl 的响应时间很短,0.0011873245239257812 sec,跟实验的结果不一样,我看系统的状态也没有io问题,通过pidstat也没有mysql的 iodelay

    作者回复: 再增加数据(比如10倍)试试?😓

    
    
  • Musisan
    2019-05-20
    man确实是个好东西,以前给忽略了哈,^_^
    
    
  • LYy
    2019-05-18
    硬核 赞👍
    
    
  • 无名老卒
    2019-04-25
    实例插入了3W条数据,这样子才使得get data的时间变大了一些,后面增加了索引之后,就变正常了。
    ```
    root@fdm:~#while :;do curl http://192.168.254.131:10000/products/geektime;done
    Got data: () in 2.335655689239502 sec
    Got data: () in 2.3957033157348633 sec
    Got data: () in 5.153362274169922 sec
    Got data: () in 6.846464157104492 sec
    Got data: () in 3.2172300815582275 sec
    Got data: () in 0.04523611068725586 sec
    Got data: () in 0.0017778873443603516 sec
    Got data: () in 0.00156402587890625 sec
    Got data: () in 0.0016543865203857422 sec
    ```

    但是后面把dataservice停止之后,还是没有什么提高的效果,所以有可能硬盘使用了SSD,以及内存只有2G的原因导致的。另外说明一点的是,插入3W条数据之后,看到的products.MYD有1.5G了~
    展开

    作者回复: 插入更多的数据试试?

    
    
  • 王伟
    2019-04-23
    打卡
    
    
  • 大飞
    2019-04-03
    打卡
    
    
  • 如果
    2019-03-13
    DAY28,打卡
    
    
  • 陈云卿
    2019-02-06
    打卡day29 ,之前在工作中遇到过 释放缓存的情况,但是也会发现echo 1在某些情况下没有办法有效地释放缓存,这会是什么原因引起的呢?

    作者回复: 试试 echo 3

    
    
我们在线,来聊聊吧