zoukankan      html  css  js  c++  java
  • PHP&MYSQL 常用的一些性能检测

    (1)memory_get_usage可以分析内存占用空间

    我们在实际编码中,要想实现对内存的查看和操作,许多程序员们第一个想到的就是PHP memory_get_usage()这个PHP脚本内存函数。
    下面是PHP memory_get_usage()使用示例:
    <?php
        echo memory_get_usage(), '<br />'; // 313864  
        $tmp = str_repeat('http://www.baidu.com', 4000);  
        echo memory_get_usage(), '<br />'; // 406048  
        unset($tmp);  
        echo memory_get_usage(); // 313952
    ?>

    上面的程序后面的注释代表了它们的输出(单位为 byte(s)),也就是当时 PHP 脚本使用的内存(不含 memory_get_usage() 函数本身占用的内存)

    由上面的例子可以看出,要想减少内存的占用,可以使用 PHP unset() 函数把不再需要使用的变量删除。

    类似的还有:PHP mysql_free_result() 函数,可以清空不再需要的查询数据库得到的结果集,这样也能得到更多可用内存。

    PHP memory_get_usage()还可以有个参数,$real_usage,其值为布尔值。默认为 FALSE,表示得到的内存使用量不包括该函数(PHP 内存管理器)占用的内存;
    当设置为 TRUE 时,得到的内存为不包括该函数(PHP 内存管理器)占用的内存。
    所以在实际编程中,可以用PHP memory_get_usage()比较各个方法占用内存的高低,来选择使用哪种占用内存小的方法。

    (2)用microtime函数就可以分析程序执行时间
    使用示例:
    <?php
    function microtime_float()
    {
        list($usec, $sec) = explode(" ", microtime());
        return ((float)$usec + (float)$sec);
    }
    $time_start = microtime_float();
    // Sleep for a while
    usleep(2000000);
    $time_end = microtime_float();
    $time = $time_end - $time_start;
    echo "Did nothing in $time seconds\n";
    ?>

    (3)SQL的效率可以使用打开慢查询查看日志分析

    打开MySQL慢查询
    MySQL慢 查询记录日志对于跟踪PHP+MySQL体系下的MySQL负载调优问题很有用处,比如安装了很多Discuz!插件的用户,这样可以大概排查出那些插件 有代码问题。其实启用MySQL的慢查询日志很简单,只需要在MySQL的配置文件里添加log-slow-queries和 long_query_time两个参数即可。

    今天有个朋友问我,就顺带记录上来。

    Windows下开启MySQL慢查询
    MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上
    log-slow-queries = F:\MySQL\log\mysqlslowquery.log
    long_query_time = 2

    Linux下启用MySQL慢查询
    MySQL在Windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上
    log-slow-queries=/data/mysqldata/slowquery.log
    long_query_time=2

    注意
    log-slow-queries = F:\MySQL\log\mysqlslowquery.log为慢查询日志存放的位置,一般这个目录要有MySQL的运行帐号的可写权限,一般都将这个目录设置为MySQL的数据存放目录;
    long_query_time=2中的2表示查询超过两秒才记录;


    在my.cnf或者my.ini中添加log-queries-not-using-indexes参数,表示记录下没有使用索引的查询。比如:
    log-slow-queries=/data/mysqldata/slowquery.log
    long_query_time=2
    log-queries-not-using-indexes



    (4)SQL 找到有瓶颈的使用EXPLAIN 来分析
     不做详细阐述 Mysql_Explain_语法详细解析。

    附:你用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在?
    1.脚本执行时间,启用xdebug,使用WinCacheGrind分析。
    2.数据库查询,mysql使用EXPLAIN分析查询,启用slow query log记录慢查询。
    3, xdebug统计函数执行次数和具体时间进行分析。
    4, 在线系统用strace跟踪相关进程的具体系统调用。

  • 相关阅读:
    HDU1720 A+B Coming
    HDU1390 ZOJ1383 Binary Numbers
    HDU1390 ZOJ1383 Binary Numbers
    HDU2504 又见GCD
    HDU2504 又见GCD
    HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking
    HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking
    HDU1020 ZOJ2478 Encoding
    HDU1020 ZOJ2478 Encoding
    HDU2097 Sky数
  • 原文地址:https://www.cnblogs.com/ninelands/p/2540346.html
Copyright © 2011-2022 走看看