Execute to Parse% 及open_cursors,session_cached_cursors

本文探讨了SQL语句执行与解析的比率及其对数据库性能的影响,并提供了设置session_cached_cursors参数以减少解析次数,提高系统性能的方法。通过SQL查询评估参数使用率,指导参数调整以实现最佳性能。

Execute to Parse : 

SQL语句执行与解析的比率。如果某条新的SQL语句经 过一次解析然后执行,且再也不在同一个session中执行的话,那么比率为0,这个比率应该越高越好。比如12.26%说明,同 一个session中执行的SQL语句中只有12.26%的SQL是已经解析好了的(不需要再次解析)。说明DB中新的SQL语句相对较多。 

计算方式:      Execute to parse=round(100 * (1-Parses/Executions),2),    如果parse次数大于executions,可能会导致此值为负数,对性 能会有影响 。 这个值越接近100%越好 (即Parses/Executions  越接近0,也即几乎所有SQL都是已经解析过的,只要执行就好了,当然这是理想状态)。 

-------------------------------------------------------------------------------------

如何正确设置session_cached_cursors参数

正确设置open_cursors和'session_cached_cursors'  可以减少sql解析,提高系统性能,那么,如何正确设置'session_cached_cursors'  这个参数呢?我们可以把握下面的原则:
1、'session_cached_cursors'  数量要小于open_cursor
2、要考虑共享池的大小
3、使用下面的sql判断'session_cached_cursors'  的使用情况。如果使用率为100%则增大这个参数值。

SELECT   'session_cached_cursors' parameter,
         LPAD (VALUE, 5) VALUE,
         DECODE (VALUE,
                 0, '  n/a',
                 TO_CHAR (100 * used / VALUE, '990') || '%')
            usage
  FROM   (SELECT   MAX (s.VALUE) used
            FROM   v$statname n, v$sesstat s
           WHERE   n.name = 'session cursor cache count'
                   AND s.statistic# = n.statistic#),
         (SELECT   VALUE
            FROM   v$parameter
           WHERE   name = 'session_cached_cursors')
UNION ALL
SELECT   'open_cursors',
         LPAD (VALUE, 5),
         TO_CHAR (100 * used / VALUE, '990') || '%'
  FROM   (  SELECT   MAX (SUM (s.VALUE)) used
              FROM   v$statname n, v$sesstat s
             WHERE   n.name IN
                           ('opened cursors current',
                            'session cursor cache count')
                     AND s.statistic# = n.statistic#
          GROUP BY   s.sid),
         (SELECT   VALUE
            FROM   v$parameter
           WHERE   name = 'open_cursors') 

 

-------------------------------------------------------------

参考

http://www.orafaq.com/node/758 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-675607/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-675607/

import pymysql from urllib.parse import unquote def transfer_data(): # 本地数据库配置 local_config = { 'host': 'localhost', 'port': 3306, 'user': 'root', 'password': '123456', 'database': 'ceshi', 'charset': 'utf8mb4', 'cursorclass': pymysql.cursors.SSCursor } # 远程数据库配置(火山引擎) remote_config = { 'host': "vedbm-bm4uzslhi44f.default.mysql.vedb.volces.com", 'port': 3306, 'user': "only_read_yhx", 'password': unquote("%X8AIQ%@Kf8PMVpv"), 'database': 'cjb_bid', 'charset': 'utf8mb4', 'cursorclass': pymysql.cursors.SSCursor } # 建立本地数据库连接 local_conn = pymysql.connect(**local_config) local_cursor = local_conn.cursor() # 建立远程数据库连接 remote_conn = pymysql.connect(**remote_config) remote_cursor = remote_conn.cursor() try: # 查询本地表数据 select_sql = "SELECT * FROM cjb_project_tender_all_v1_list_copy" local_cursor.execute(select_sql) # 获取字段名 columns = [desc[0] for desc in local_cursor.description] # 构造插入语句(使用 ON DUPLICATE KEY UPDATE 避免重复插入) placeholders = ', '.join(['%s'] * len(columns)) update_clause = ', '.join([f"{col}=VALUES({col})" for col in columns]) insert_sql = f""" INSERT INTO cjb_project_tender_all_v1_list_copy ({', '.join(columns)}) VALUES ({placeholders}) ON DUPLICATE KEY UPDATE {update_clause} """ # 逐条读取并插入 row = local_cursor.fetchone() count = 0 while row: try: remote_cursor.execute(insert_sql, row) remote_conn.commit() count += 1 if count % 100 == 0: print(f"已插入 {count} 条数据") except Exception as e: print(f"插入失败:{e}") remote_conn.rollback() row = local_cursor.fetchone() print(f"数据迁移完成,共插入 {count} 条数据") except Exception as e: print(f"操作失败:{e}") import traceback traceback.print_exc() finally: local_cursor.close() local_conn.close() remote_cursor.close() remote_conn.close() print("数据库连接已关闭") # 调用函数 transfer_data()让速度快一点,插入失败就跳过该条数据
最新发布
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值