Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL 5.7简单计数查询有时快,有时慢 【1】 下面是一个简单的计数查询:_Mysql_Performance_Count - Fatal编程技术网

MySQL 5.7简单计数查询有时快,有时慢 【1】 下面是一个简单的计数查询:

MySQL 5.7简单计数查询有时快,有时慢 【1】 下面是一个简单的计数查询:,mysql,performance,count,Mysql,Performance,Count,【2】 查询结果: +----------+ | count(*) | +----------+ | 1021863 | +----------+ 1 row in set, 1 warning (34.77 sec) 【3】 有时是(大多数时候): 【4】 几分钟后,它变得非常缓慢,就像第一个结果显示。 【5】 查询将使用以下索引,uk_customer包含“每月”列: +----+-------------+----------------------+------------+-----

【2】 查询结果:

+----------+
| count(*) |
+----------+
| 1021863 |
+----------+
1 row in set, 1 warning (34.77 sec)
【3】 有时是(大多数时候): 【4】 几分钟后,它变得非常缓慢,就像第一个结果显示。 【5】 查询将使用以下索引,uk_customer包含“每月”列:

+----+-------------+----------------------+------------+------+--------------------------------------------+----------------+---------+-------+---------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+----------------------+------------+------+--------------------------------------------+----------------+---------+-------+---------+----------+-------------+
| 1 | SIMPLE | fees | NULL | ref | uk_warehouse,uk,uk_calcu | uk_customer | 4 | const | 2028586 | 10.00 | Using where |
+----+-------------+----------------------+------------+------+--------------------------------------------+----------------+---------+-------+---------+----------+-------------+
1 row in set, 2 warnings (0.00 sec)
=======================================================================

【6】 服务器内存为5G,缓冲池大小为4G。以及索引大小: 【7】 innodb设置如下所示: 当前缓冲区使用情况:

+---------------------------------------+---------------+
| Variable_name | Value |
+---------------------------------------+---------------+
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead | 753136482 |
| Innodb_buffer_pool_read_ahead_evicted | 185375 |
| Innodb_buffer_pool_read_requests | 1355375133341 |
| Innodb_buffer_pool_reads | 2418853408 |
+---------------------------------------+---------------+
5 rows in set (0.00 sec)
页面使用:

+----------------------------------+----------+
| Variable_name | Value |
+----------------------------------+----------+
| Innodb_buffer_pool_pages_data | 246447 |
| Innodb_buffer_pool_pages_dirty | 2738 |
| Innodb_buffer_pool_pages_flushed | 84827986 |
| Innodb_buffer_pool_pages_free | 3982 |
| Innodb_buffer_pool_pages_misc | 11699 |
| Innodb_buffer_pool_pages_total | 262128 |
+----------------------------------+----------+
6 rows in set (0.00 sec)
======================================================================= 【8】 但它在从属服务器上运行良好,速度非常快,几乎都是2秒以上

请帮助,如何调整性能?

这就是“缓存”的效果。InnoDB基本上有一个主缓存“buffer\u pool”,其大小由
InnoDB\u buffer\u pool\u size
控制。总数据集有多大

进一步详情:

  • 由于缓冲池中没有缓存任何内容,因此必须从磁盘读取内容,因此需要(比如)35秒
  • 如果很快再次运行查询,则不需要I/O,因为这些内容仍在缓存中。因此2秒
  • 如果在再次运行之前有一段时间间隔,则其他数据会进入缓冲池,从而碰撞出查询的块(可能是所有块)。不是,现在是35秒
  • 治疗:

    • 不要运行“大”查询。计算一百万行可能需要100MB的缓存。我说不出第三项的大问题是什么
    • 更好的索引。对于这一个查询,
      索引(flag,bmmonth)
      是最佳的,需要的数据更少,从而加快了非缓存(35s)版本的速度。此外,由于数据较小,其从缓存中跳出的可能性较小
    • 避免交换。5GB内存中的4GB缓冲池可能导致交换。这对MySQL的性能非常糟糕。我强烈建议您将缓冲池大小降低到3G
    • 更多的RAM(和更大的缓冲池)
    • 找到其他“大”查询,并努力减少数据的使用
    • 质疑是否需要一个100万左右的准确数字。这涉及到用户界面的更改,可能还涉及到“估计”计数的方法
    • 汇总表——每晚统计前一天发生的事件;将其保存在汇总表中,并对其运行更快的查询。(我可以进一步讨论这个问题。)
    缓冲区和页面使用指标是“计数器”,需要除以正常运行时间以获得“每秒”。为了进一步分析:

    汇总表:

    业务需求包括: 查找所有匹配的数据并通过分页显示在UI中。其中,UI中也需要显示数据集的总数。有没有符合要求的好办法

    @草莓目前还没有覆盖国旗和b月的索引,但系统使用了另一个索引,这可能不是最正确的。我稍后会创建一个。您是对的,bmmonth的类型是int(11),所以这是一个错误,我将删除单引号

    @威尔森豪克 读取缓冲区变量如下所示:
    
    +----------------------+--------+
    |变量名称|值|
    +----------------------+--------+
    |读取缓冲区大小131072|
    |读取缓冲区大小131072|
    +----------------------+--------+
    
    
    cat/proc/cpuinfo | grep“物理id”| sort | uniq | wc-l
    1.
    
    
    cat/proc/cpuinfo | grep“处理器”| sort | uniq | wc-l
    4.
    

    服务器内存:
    
    自由-m
    缓存的可用共享缓冲区总数
    成员:80017864 136 0 145 2188
    -/+缓冲区/高速缓存:5530 2470
    掉期:0
    
    mysqld使用的内存:
    
    PID用户PR NI VIRT RES SHR S%CPU%MEM TIME+命令
    10920 mysql 20 0 6999m 5.1g 7292 S 48.9 65.6 53260:31 mysqld

    @Wilson Hauck 创建表格的结果如下所示:
    
    创建表格:创建表格费用(
    id bigint(20)无符号非空自动增量注释“已删除”,
    uid bigint(20)不为空默认值“0”注释“已删除”,
    b月整数(11)非空默认值“201501”注释“已删除”,
    bno varchar(32)默认“”注释“已删除”,
    费用\u no varchar(32)不为空默认“”注释“已删除”,
    cur_time datetime默认空注释“已删除”,
    cusid varchar(32)默认“”注释“已删除”,
    cusname varchar(32)默认“”注释“已删除”,
    wcode varchar(32)默认“”注释“已删除”,
    wname varchar(32)默认“”注释“已删除”,
    product_id varchar(32)默认“”注释“已删除”,
    产品名称varchar(300)默认“”注释“已删除”,
    splace_code varchar(32)默认“”注释“已删除”,
    splace varchar(32)默认“”注释“已删除”,
    批次代码varchar(32)默认“”注释“已删除”,
    产品日期时间戳空默认空注释“已删除”,
    到期日默认空注释“已删除”,
    in_time Stamp NULL默认空注释“已删除”,
    温度类型varchar(4)默认“”注释“已删除”,
    温度名称varchar(4)默认“”注释“已删除”,
    总重量十进制(16,6)默认值“0.000000”注释“已删除”,
    总量十进制(16,6)默认值“0.000000”注释“已删除”,
    总数量十进制(16,6)默认值“0.000000”注释“已删除”,
    主题代码varchar(32)默认“”注释“已删除”,
    subject_name varchar(32)默认“”注释“已删除”,
    charge_unit varchar(32)默认“”注释“已删除”,
    费用单位类型varchar(32)默认“”注释“已删除”,
    charge_num decimal(16,6)默认值“0.000000”注释“已删除”,
    金额小数(16,6)默认值“0.000000”注释“已删除”,
    减额金额小数(16,6)默认值“0.000000”注释“已删除”,
    折扣金额十进制(16,6)默认值“0.000000”注释“已删除”,
    规则\u无varchar(32)默认“”命令
    
    +--------------------------------------------------+---------------------------+------------+--------------+
    | Table_Name | Index_Name | Page_Count | Size_in_MB |
    +--------------------------------------------------+---------------------------+------------+--------------+
    | `test`.`fees` | PRIMARY | 46503 | 567.04021835 |
    | `test`.`fees` | uk_customer | 2521 | 34.86496449 |
    | `test`.`fees` | uk_calcu | 3178 | 30.72235107 |
    
    innodb_page_size = 16384
    innodb_buffer_pool_size = 4G
    innodb_buffer_pool_instances = 2
    innodb_buffer_pool_load_at_startup = 1
    innodb_buffer_pool_dump_at_shutdown = 1
    innodb_lru_scan_depth = 2048
    innodb_lock_wait_timeout = 5
    lock_wait_timeout=5
    innodb_io_capacity = 1000
    innodb_io_capacity_max = 6000
    innodb_flush_method = O_DIRECT
    innodb_file_format = Barracuda
    innodb_file_format_max = Barracuda
    #innodb_undo_logs = 128
    innodb_undo_tablespaces = 2
    innodb_flush_neighbors = 0
    innodb_log_file_size = 128M
    innodb_log_files_in_group = 2
    innodb_log_buffer_size = 16777216
    #innodb_max_undo_log_size = 2147483648
    innodb_purge_threads = 4
    innodb_large_prefix = 1
    innodb_thread_concurrency = 16
    innodb_print_all_deadlocks = 1
    innodb_strict_mode = 1
    innodb_sort_buffer_size = 256k
    innodb_write_io_threads = 4
    innodb_read_io_threads = 4
    innodb_file_per_table = 1
    
    +---------------------------------------+---------------+
    | Variable_name | Value |
    +---------------------------------------+---------------+
    | Innodb_buffer_pool_read_ahead_rnd | 0 |
    | Innodb_buffer_pool_read_ahead | 753136482 |
    | Innodb_buffer_pool_read_ahead_evicted | 185375 |
    | Innodb_buffer_pool_read_requests | 1355375133341 |
    | Innodb_buffer_pool_reads | 2418853408 |
    +---------------------------------------+---------------+
    5 rows in set (0.00 sec)
    
    +----------------------------------+----------+
    | Variable_name | Value |
    +----------------------------------+----------+
    | Innodb_buffer_pool_pages_data | 246447 |
    | Innodb_buffer_pool_pages_dirty | 2738 |
    | Innodb_buffer_pool_pages_flushed | 84827986 |
    | Innodb_buffer_pool_pages_free | 3982 |
    | Innodb_buffer_pool_pages_misc | 11699 |
    | Innodb_buffer_pool_pages_total | 262128 |
    +----------------------------------+----------+
    6 rows in set (0.00 sec)