MySQL性能分析脚本

Posted 蒋乐兴的技术随笔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL性能分析脚本相关的知识,希望对你有一定的参考价值。

"""
目标       :       这个工具用于分析mysql实例的性能问题
作者       :       蒋乐兴
QQ         :       1721900707
版本信息   :       基于python3.4 MySQL 5.7.11  orzdba  
MySQL用户要用到的一些权限:
    create user [email protected]‘127.0.0.1‘ identified by ‘131417‘;     
"""

#!/usr/bin/python
#!coding:utf-8
import mysql.connector as connector
import json
import argparse
import sys

show_golbal_value="select variable_name,variable_value from performance_schema.global_variables where variable_name= %s"
show_global_statu="select variable_name,variable_value from performance_schema.global_status where variable_name= %s"

def anaylsis_query_cache(cursor,results):
    """
    本函数用于分析mysql实例的查询缓存、如果query_cache_type=0说明没有开启这个工能,那么分析结束。
    不然要分析查询缓存的剩余内存,和命中率。把分析的结果包装到results变量中。
    """
    analysis_var=("query_cache_type",)
    cursor.execute(show_golbal_value,analysis_var)
    key,value=cursor.fetchone()
    #如果value的值等于OFF、说明本实例并没有开启查询缓存。
    if value==OFF:
        results[query_cache]=query cache function not in use for this instance
    else:
        #如果逻辑走到了这里说明、实例开启了查询缓存
        #Qcache_free_memory 对应着剩余的查询缓存内存。
        cursor.execute(show_global_statu,("Qcache_free_memory",))
        key,value = cursor.fetchone()
        #由于这个是延时计算的;所以查出来就要把它用掉。********************
        Qcache_free_memory=value
        #query_cache_size   对应着查询缓存的内存大小。
        cursor.execute(show_golbal_value,("query_cache_size",))
        key,value = cursor.fetchone();
        query_cache_size=value
        #用于查询缓存的内存空闲率
        if float(query_cache_size) != 0:
            query_cache_memory_free_rate=float(Qcache_free_memory)/float(query_cache_size)
        else:
            query_cache_memory_free_rate=None
        #Qcache_hits    对应着命中的次数
        cursor.execute(show_global_statu,("Qcache_hits",))
        key,value=cursor.fetchone()
        Qcache_hits=value
        #Qcache_inserts 对应的没有命中的次数----由于没有命中所以要插入。
        cursor.execute(show_global_statu,("Qcache_inserts",))
        key,value=cursor.fetchone()
        Qcache_inserts=value
        #查询缓存的命中率为
        if float(Qcache_hits+Qcache_inserts) != 0:
            query_cache_hit_rate=float(Qcache_hits)/float(Qcache_hits+Qcache_inserts)
        else:
            query_cache_hit_rate=None
        #组织结果
        tempResult={}
        tempResult[Qcache_free_memory]=Qcache_free_memory
        tempResult[query_cache_size]=query_cache_size
        tempResult[query_cache_memory_free_rate]=query_cache_memory_free_rate
        tempResult[Qcache_hits]=Qcache_hits
        tempResult[Qcache_inserts]=Qcache_inserts
        tempResult[query_cache_hit_rate]=query_cache_hit_rate
        results[query_cache]=tempResult

analysis_function_sets={anaylsis_query_cache:anaylsis_query_cache}


if __name__=="__main__":
    cnx=None
    cursor=None
    config={
        host:127.0.0.1,
        port:3306,
        user:admin,
        password:131417
        }
    results={}
    try:
        cnx=connector.connect(**config)
        cursor=cnx.cursor(buffered=True)
        anaylsis_query_cache(cursor,results)
        for key,function in analysis_function_sets.items():
            function(cursor,results)
        print(results)
    except Exception as err:
        print(err)
    finally:
        if cnx != None:
            cnx.close()
            cursor.close()
    
    

 

以上是关于MySQL性能分析脚本的主要内容,如果未能解决你的问题,请参考以下文章

mysql jdbc源码分析片段 和 Tomcat's JDBC Pool

执行AJAX返回HTML片段中的JavaScript脚本

代码片段:Shell脚本实现重复执行和多进程

部分代码片段

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma

;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk