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跟踪相关进程的具体系统调用。

  • 相关阅读:
    DDK 的一些笔记
    C# 32位程序访问64位系统注册表
    自己对设备栈的理解
    简单驱动编写与windbg调试
    DDK 的一些笔记other
    USB设备的一些概念
    C# 32位程序与64位程序读\写注册表的区别
    dbca建库时找不到ASM磁盘
    sf01_什么是数据结构
    cPickle.dump函数
  • 原文地址:https://www.cnblogs.com/ninelands/p/2540346.html
Copyright © 2011-2022 走看看