› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
sdjl
V2EX  ›  MySQL

求助, mysql所有查询都变成了慢查询, 但是在mysql client里面又很快

  •  
  •   sdjl · Jun 25, 2013 · 4716 views
    This topic created in 4844 days ago, the information mentioned may be changed or developed.
    # User@Host: lengxiaohua[lengxiaohua] @ localhost []
    # Query_time: 43.612502 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0
    SET timestamp=1372129298;
    commit;


    # Time: 130625 11:01:39
    # User@Host: lengxiaohua[lengxiaohua] @ localhost [127.0.0.1]
    # Query_time: 0.242507 Lock_time: 0.000045 Rows_sent: 1 Rows_examined: 113883
    SET timestamp=1372129299;
    select * from User where LOWER(email)='[email protected]' limit 1;


    # User@Host: lengxiaohua[lengxiaohua] @ localhost [127.0.0.1]
    # Query_time: 42.509005 Lock_time: 0.000036 Rows_sent: 0 Rows_examined: 1
    SET timestamp=1372129298;
    update User set login_count = login_count +1 where Userid=116881;

    上面是慢查询日志, 同样的sql语句复制到终端里面运行是0.00秒, 但是mysql的io负载很高, 不知道如何分析优化mysql, 求助
    10 replies  •  1970-01-01 08:00:00 +08:00
    Livid
        1
    Livid  
    MOD
    PRO
       Jun 25, 2013
    表的类型是 MyISAM?
    sdjl
        2
    sdjl  
    OP
       Jun 25, 2013
    @Livid InnoDB 会不会是查询量大导致的?
    maja
        3
    maja  
       Jun 25, 2013
    默认表应该是ci的,这样lower函数不必须

    show create table user;

    explain select * from User where email = '[email protected]';
    cbc009
        4
    cbc009  
       Jun 25, 2013
    explain一下看看
    sdjl
        5
    sdjl  
    OP
       Jun 25, 2013
    @maja
    @cbc009 感谢两位 lower函数导致了全表扫描.... 我先改一下这里
    sdjl
        6
    sdjl  
    OP
       Jun 25, 2013
    需要优化的地方许多, 我正在用慢查询分析工具来找原因
    scourgen
        7
    scourgen  
       Jun 25, 2013
    还有就是如果开了query cache,那么可能会造成sql语句一会儿执行快一会执行慢

    可以用 select sql_no_cache xxxxx强行关闭query cache,这样查出来的东西就是不经过缓存的
    Livid
        8
    Livid  
    MOD
    PRO
       Jun 25, 2013
    @sdjl 另外就是,像计数器这样的东西,一个对 MySQL 性能影响不会太大的做法是用 Redis 来计数,然后定期写回 MySQL(如果你对 Redis 的数据持久性没信心的话)
    msg7086
        9
    msg7086  
       Jun 25, 2013
    @Livid memcache也有自己的计数器,也可以用来定期回写
    sdjl
        10
    sdjl  
    OP
       Jun 25, 2013
    @Livid
    @msg7086 嗯 谢谢提醒, 我已经暂时关闭登录统计了, 把Session放到内存中, 然后再给一些表添加索引, 现在性能好多了

    这次优化主要是靠以下方式:
    使用以下方法统计一段时间内各个进程的io使用 http://www.xaprb.com/blog/2009/08/23/how-to-find-per-process-io-statistics-on-linux/
    也可以用 iotop 来查看io进程使用io的情况, 然后找到是mysql占用了io, 再用慢查询分析工具来找可能的影响性能的查询
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1178 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 23:39 · PVG 07:39 · LAX 16:39 · JFK 19:39
    ♥ Do have faith in what you're doing.