• 关于处理百万级大批量数据的mysql运行几个重要点


    处理大批量百万级的数据几点重要知识点:

    一:设置php运行的内存配置 ini_set("memory_limit","1200M");

      在php.ini中有如下配置

      ; Maximum input variable nesting level
      ; http://php.net/max-input-nesting-level
      ;max_input_nesting_level = 64

      ; How many GET/POST/COOKIE input variables may be accepted
      ; max_input_vars = 1000

      ; Maximum amount of memory a script may consume (128MB)
      ; http://php.net/memory-limit
      memory_limit = 100M

      会有一个默认的配置,导致运行到一定数量的时候,报错,无法运行下去。

    二:设置脚本最大执行时间 set_time_limit ( int $seconds )

      方法具体详情

    三:不设置缓存结果 mysql_unbuffered_query

      在处理大批量数据的时候优势非常大,

    (PHP 4 >= 4.0.6, PHP 5)

    mysql_unbuffered_query — 向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行

    说明

    resource mysql_unbuffered_query ( string $query [, resource $link_identifier ] )

    mysql_unbuffered_query() 向 MySQL 发送一条 SQL 查询 query,但不像 mysql_query() 那样自动获取并缓存结果集。一方面,这在处理很大的结果集时会节省可观的内存。另一方面,可以在获取第一行后立即对结果集进行操作,而不用等到整个 SQL 语句都执行完毕。当使用多个数据库连接时,必须指定可选参数 link_identifier

    Note:

    mysql_unbuffered_query() 的好处是有代价的:在 mysql_unbuffered_query() 返回的结果集之上不能使用mysql_num_rows() 和 mysql_data_seek()。此外在向 MySQL 发送一条新的 SQL 查询之前,必须提取掉所有未缓存的 SQL 查询所产生的结果行。

    参见 mysql_query()

     

    四:取消变量缓存 unset($x)

      在循环的结束环节,使用unset方法释放变量占用的内存。

     

     

    具体代码例子(使用pdo):

    $pdo = new PDO("mysql:host=127.0.0.1;dbname=aa","root","root"); 
    $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
    ini_set("memory_limit","1200M");
    set_time_limit(0);
    
    
    $sql = 'select url,num from cas_key limit 100000 ';
    $rs = $pdo->query($sql);
    
    while($value = $rs->fetch()){
        unset($xxx);
        unset($xxx);
        unset($xxx);
    }
    var_dump(memory_get_usage());//查看内存占用方法

     

     

    如有更多优化方法,欢迎请教指点!

     

     

     

     

  • 相关阅读:
    Manacher算法
    [SCOI2010]生成字符串
    [HNOI2008]GT考试
    矩阵乘法
    关于主席树
    Spring 书籍
    Spark书籍
    TimeMeasure
    Dynamic login
    Image quality evaluation
  • 原文地址:https://www.cnblogs.com/fpcing/p/7249818.html
Copyright © 2020-2023  润新知