zoukankan      html  css  js  c++  java
  • paip.程序功能时间性能优化及SQL语句优化

    paip.程序功能时间性能优化及SQL语句优化

     

    作者Attilax 1466519819@qq.com

     

    跟踪工具XDEBUG.. 1

    Profiler日志分析工具WinCacheGrind. 2

    从代码中得到完整的SQL语句以便测试... 2

    测试SQL语句时间... 2

    禁用SQL缓存... 2

    SQL语句优化工具SQL Tuning&LECCO SQL Exper2

    人工优化流程与思路... 3

    SQL语句格式化工具... 4

    调试错误SQL语句... 4

    SQL语句复杂条件优先级格式化EXPLAIN.. 4

    参考... 4

     

     

    有时候,一个功能可能需要26秒的时候才能完成,我想是性能出了问题..那如何优化性能呢..

    ASPNET网站,可以使用VS2010的代码分析工具,找出节点

    JAVA网站,可以使用相应的工具

    PHP的,也有相应的工具..这里以PHP为例子..

     

    跟踪工具XDEBUG

    首先,我们需要跟踪代码中哪些方法出了问题..需要一个跟踪工具,这里以XDEBUG为例..

    开启profiler::

    xdebug.profiler_enable=On

    xdebug.profiler_output_dir="d:\xdebug"

    xdebug.profiler_output_name="script"

    ;xdebug.profiler_aggregate=on

    xdebug.profiler_append=on

    xdebug.profiler_enable_trigger=on

     

    注意:xdebug.profiler_aggregate这个参数不要设置,否则APACHE启动了不报错,但是却不能访问网站..我的XD版本是v2.1.0,PHPV 5.2.5  , APACHE版本2.2.x

    它生成的日志,详细,虽然人类可读,但是为了更好的分析,需要加载一个分析工具

     

    如果所用的代码语言没有好的跟踪工具,可以使用时间函数采用二分查找法算出时间值。。一般都是在SQL语句调用处会有性能差的情况

     

    Profiler日志分析工具WinCacheGrind

    切换到OVERALL TAB,可看到所有方法函数调用次数,以及总时间..按消耗总时间排序..

    先在上面选择中一条,下边可详细显示所有的调用此函数的代码文件行数..并有消耗时间..

    找到时间最长的那条函数。。

     

    然后回到最上面,选中此函数,则下边会显示出它的详细被调用情况,以及文件代码页行数.

     

    这样,就得到结果了,是SQL语句调用错误

     

    从代码中得到完整的SQL语句以便测试

    代码中的SQL语句往往是不完整的,有各种变量等,先用调试器加载,打上断点。中断后然后WATCH express功能,得到完整的SQL语句

    测试SQL语句时间

    可放入GUI管理器,一般可以得到执行SQL的时间,比如13..如果第二次执行时时间大大缩短,是因为服务器启用了缓存。可以使用关键字SQL_NO_CACHE禁用此SQL语句的缓存

    禁用SQL缓存

    因为一般网站及SQL服务器均有缓存,会影响到跟踪,需要禁用..

    或者在目录下删除缓存文件可以使用SVN的红色惊叹号找出最新修改的存文件,删除

    重启SQL服务器,清除SQL缓存

    还可使用关键字"SELECT SQL_NO_CACHE count(*) FROM  xxx” 来在SQL语句中不使用缓存

     

     

    SQL语句优化工具SQL Tuning&LECCO SQL Exper

    LECCO SQL Expert人工智能自动SQL优化

    LECCO SQL Expert就采用了这种人工智能技术,其SQL Expert支持OracleSybaseMS SQL ServerIBM DB2数据库平台。其突出特点是自动优化SQL语句。除此以外,还可以以人工智能知识库“反馈式搜索引擎”来重写SQL语句,并找出所有等效的SQL语句及可能的执行计划,通过测试运行为应用程序和数据库自动找到性能最好的SQL语句

     

     

     SQL Tuning 简介
    SQL Turning Quest公司出品的Quest Central软件中的一个工具。
    Quest Central(图1)是一款集成化、图形化、跨平台的数据库管理解决方案,可以同时管理 OracleDB2 SQL server 数据库。它包含了如下的多个工具:
    ? 数据库管理(DBA
    ? 数据库监控(Monitoring Pack
    ? 数据库诊断 (Spotlight Diagnostics)
    ?
    数据库分析 (Database Analysis)
    ? SQL
    优化 (SQL Tuning)
    ?
    空间管理 (Space Management)
    ?
    压力测试 (Load Generator)
    ?
    数据生成 (Data Generator)
    ? PL/SQL
    开发 (TOAD)

     

    参考:SQL优化工具_晨曦阳光_新浪博客

     

     

    人工优化流程与思路

    当没有合适的自动化工具时,就需要人工优化

    可以用EXPLAIN功能查看抓取的ROWS,如果过多,则当然会影响性能了..

     

    A.是否LEFT JOIN多表连接

    可考虑SQL语句是否多表连接,特别是 LEFT JOIN多表连接(大于两个表)。。

    如果是LEFT JOIN两个表连接,一般也不会太影响性能。。但是三个表连接就会大大影响性能.

    可以先分别两两连接,分成两个SQL语句,然后UNION。。在此过程中需要使用SQL格式化工具进行调试。。

     

    经过这样的优化,SQL执行时间就从13秒下降到50MS了。圆满成功..

     

    B. 进行分拆然后UNION

    如果不是LEFT JOIN的情况,最好的办法就是把SQL语句一条条拆出来,然后分别执行找到原因。。连接的时候使用INNER JOIN,然后分别UNION就可以了。。

     

     

     

    C.多条SQL分别用代码执行.

    如果确实在SQL上没办法,可以把SQL分拆成多个小语句,然后用代码分别执行就OK..然后在程序端进行UNION ,排序什么的。。就可以了..

    SQL语句格式化工具

    http://www.orczhou.com/sqlparser/sqlbeautifier/index.php

    这个在线工具很强大..错误的SQL也可以格式化强。。有语法关键字高亮..

     

    是针对MySQL的,作者从phpMyAdmin中抠出来的,php-SQL-Format

     

    sqlPP 则只能格式化正确的SQL语句

     

     

    调试错误SQL语句

     

    因为复杂的SQL查询语句往往格式不清,SQL执行器报错只龙统的说是在哪一行,很难查清原因..

     

    对于条件复杂的语句,在格式化后,放在MYSQL gui tool 中,就可以很容易得到错误语句的行号

     

    SQL语句复杂条件优先级格式化EXPLAIN

    有时候,一些复杂语句条件很多,AND OR 等连在一起,分不清优先级,可以先格式化,调试正确,然后使用EXPLAIN功能,会得到一个条件优先级都格式化好的SQL。。它把条件优先级用正确的括号括起来了。一下子就看出来了优先级

     

    参考

    SQL语句的自动优化_Mysql_中国网管联盟bitsCN_com_php.mht

    MySQL高速缓存 - 王惠达 - 51CTO技术博客

    sql格式化工具集合_Mysql_脚本之家

    SQL优化工具_晨曦阳光_新浪博客

  • 相关阅读:
    Codeforces Round #343 (Div. 2) B. Far Relative’s Problem 暴力
    Codeforces Round #343 (Div. 2) A. Far Relative’s Birthday Cake 水题
    Educational Codeforces Round 8 F. Bear and Fair Set 最大流
    Educational Codeforces Round 8 E. Zbazi in Zeydabad 树状数组
    Educational Codeforces Round 8 D. Magic Numbers 数位DP
    Educational Codeforces Round 8 C. Bear and String Distance 贪心
    Educational Codeforces Round 8 B. New Skateboard 暴力
    Educational Codeforces Round 8 A. Tennis Tournament 暴力
    BZOJ 4032: [HEOI2015]最短不公共子串 后缀自动机 暴力
    BZOJ 4031: [HEOI2015]小Z的房间 高斯消元 MartixTree定理 辗转相除法
  • 原文地址:https://www.cnblogs.com/attilax/p/15199791.html
Copyright © 2011-2022 走看看