精华内容
下载资源
问答
  • .net执行存储过程慢,直接执行存储过程很快 问题:如标题 解决方案:  不要在事务间执行存储过程 原因(估计):同时打开两个SqlClientConnect,对同一数据库,会产生连接锁。 ...

    问题:如标题

    解决方案:

      不要在事务间执行存储过程

    原因(估计):同时打开两个SqlClientConnect,对同一数据库,会产生连接锁。

    posted on 2019-05-30 11:36 阿日斯兰 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/loge/p/10948665.html

    展开全文
  • mysql存储过程的解决方法:首先打开my.cnf配置文件;然后添加配置【long_query_time=1】;接着通过【tail -f /tmp/logs/mysqld.log】命令监控sql;最后进行针对性的优化即可。解决方法:(推荐教程:mysql视频...

    mysql存储过程太慢的解决方法:首先打开my.cnf配置文件;然后添加配置【long_query_time=1】;接着通过【tail -f /tmp/logs/mysqld.log】命令监控sql;最后进行针对性的优化即可。

    2020092714424240224.jpg

    解决方法:

    (推荐教程:mysql视频教程)

    第一步:修改/etc/my.cnf文件,找到[mysqld] 里面加入#执行的sql

    log=/tmp/logs/mysqld.log

    #记录sql执行超过下面设置时间的sql

    log-slow-queries = /tmp/mysqlslowquery.log

    #执行时间大于等于1秒

    long_query_time = 1

    然后你可以tail -f /tmp/logs/mysqld.log 监控所有执行的sql,同样的方法可以监控mysqlslowquery.log 为执行时间超过long_query_time = 1(秒)的sql语句

    比如通过第一步我们找到了某一个mysql 自定义函数执行慢func_getDevice(); 执行了15s,但并不知道这个方法里面到底是那一条sql影响了性能,那么就有了第二步。

    第二步:进入mysql命令行,输入mysql> set profiling=1;

    mysql> select func_getDevice(1);

    mysql> show profiles;

    +----------+------------+-----------------------+

    | Query_ID | Duration | Query |

    +----------+------------+-----------------------+

    | 1 | 0.00250400 | select * from TDevice |

    +----------+------------+-----------------------+

    1 row in set (0.00 sec)

    这时候你就会看到一个详细的sql执行列表,但默认只记录15条sql,如果方法里面的sql比较多,那么可以通过设置mysql> set profiling_history_size=20;

    mysql> show variables like 'profiling%';

    +------------------------+-------+

    | Variable_name | Value |

    +------------------------+-------+

    | profiling | ON |

    | profiling_history_size | 15 |

    +------------------------+-------+

    2 rows in set (0.00 sec)

    mysql> select func_getDevice(1);

    mysql> show profiles;

    这是时候就可以准确的看到是那一条sql语句影响了性能,比如 Query_ID=1 select * from TDevice 影响了性能;mysql> show profile for query 1;详细查看执行一条sql的耗时情况

    +--------------------------------+----------+

    | Status | Duration |

    +--------------------------------+----------+

    | (initialization) | 0.000003 |

    | checking query cache for query | 0.000042 |

    | Opening tables | 0.00001 |

    | System lock | 0.000004 |

    | Table lock | 0.000025 |

    | init | 0.000009 |

    | optimizing | 0.000003 |

    查看表的索引等是否合理,通过针对性的优化以提高效率。

    相关推荐:php培训

    展开全文
  • 在使用存储过程进行千万条数据的插入的时候,插入效率在每分钟七千条左右,这样算下来,需要几十个小时,所以找了一下优化的方法,除了对存储过程本身的优化,还有就是修改了MySQL的配置文件的部分参数我做了以下几...

    在使用存储过程进行千万条数据的插入的时候,插入效率在每分钟七千条左右,这样算下来,需要几十个小时,所以找了一下优化的方法,除了对存储过程本身的优化,还有就是修改了MySQL的配置文件的部分参数

    我做了以下几个参数的修改

    innodb_log_file_size = 1024M

    日志组中的每个日志文件的大小,设置较大的值可以减少脏数据刷新到磁盘的次数

    innodb_log_buffer_size = 256M

    将日志写入日志磁盘文件前的缓冲大小,默认是16M,设置较大的值可以使日志在缓冲时不需要被保存到磁盘,减少磁盘读取次数

    innodb_flush_log_at_trx_commit = 0

    将日志中的缓冲数据写入磁盘,默认为1,即每次提交事务都会写入磁盘,改为0后将减少写入磁盘的次数

    innodb_buffer_pool_size = 4G

    该值用来高速缓冲数据和索引内存缓冲大小,也是减少磁盘IO来增加速度,一般设置为物理存储的60%~70%

    innodb_buffer_pool_instances = 4

    增加多个缓冲池,提高并行内存读写能力

    innodb_write_io_threads = 8  &&  innodb_read_io_threads = 8

    增加IO线程数,提高读写能力,根据机器的处理器来设置

    innodb_io_capacity = 500

    提高刷新脏页数量和合并插入数量,改善磁盘I/O处理能力,默认200

    以上参数修改都是通过减少对磁盘的IO操作来实现的,包括关闭了MySQL默认的事务存储到磁盘的操作,增大缓冲区的容量,这样子容易造成MySQL服务器宕机的时候,数据大量丢失,建议不要在生产环境下修改这些配置,根据实际情况修改

    本文转自:https://blog.csdn.net/qq_36182135/article/details/84854619

    展开全文
  • BEGINDECLARE personPlaneId BIGINT;DECLARE starttime datetime; #开始时间DECLARE endtime datetime; #结束时间DECLARE sumStudyTime INT; ...

    BEGIN

    DECLARE personPlaneId BIGINT;

    DECLARE starttime datetime; #开始时间

    DECLARE endtime datetime; #结束时间

    DECLARE sumStudyTime INT; #当前学时

    DECLARE targetStudyTime INT; #目标学时

    DECLARE id1_count BIGINT default 0; #t_stage_info 第一阶段count

    DECLARE id2_count BIGINT default 0; #t_stage_info 第二阶段count

    DECLARE id3_count BIGINT default 0; #t_stage_info 第三阶段count

    DECLARE firstEndTime datetime; #第一阶段结束时间

    DECLARE secEndTime datetime; #第二阶段结束时间

    DECLARE thirdEndTime datetime; #第三阶段结束时间

    DECLARE done INT DEFAULT 0;#声明光标 DECLARE cur1 CURSOR FOR SELECT p1.id, p1.start_learn_time start_time, p1.last_date end_time, p1.sum_study_time,p1.target_study_time FROM t_person_plan p1 LEFT JOIN t_person_plan_record p2 ON p1.id = p2.person_plan_id WHERE p1.license_type = 7 AND p1.last_date <= CURRENT_DATE();#t_person_plan_record p2 这个表数据大概500多万条 #当游标到达尾部时,mysql自动设置done=1 declare continue handler for SQLSTATE '02000' SET done = 1; OPEN cur1; REPEAT /* 移动游标并赋值 */ fetch cur1 into personPlaneId,startTime,endTime,sumStudyTime,targetStudyTime; if NOT done then #获取第一阶段结束时间 SET firstEndTime = (SELECT add_time FROM t_person_plan_record WHERE person_plan_id=personPlaneId AND chapter_id=29611); #获取第二阶段结束时间 SET secEndTime = (SELECT add_time FROM t_person_plan_record WHERE person_plan_id=personPlaneId AND chapter_id=29625); #获取第三阶段结束时间 SET thirdEndTime = (SELECT add_time FROM t_person_plan_record WHERE person_plan_id=personPlaneId AND chapter_id=29734); #获取主键标识 SELECT count(1) into id1_count from t_stage_info where person_plan_id=personPlaneId AND stage=1; SELECT count(1) into id2_count from t_stage_info where person_plan_id=personPlaneId AND stage=2; SELECT count(1) into id3_count from t_stage_info where person_plan_id=personPlaneId AND stage=3; IF sumStudyTime <= 12 THEN IF id1_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,startTime,endTime,sumStudyTime,targetStudyTime,1); ELSE UPDATE t_stage_info SET end_time=endTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=1; END IF; #当学到第二阶段时 ELSEIF sumStudyTime>12 AND sumStudyTime<=14 THEN #更新第一阶段数据 IF id1_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,startTime,firstEndTime,sumStudyTime,targetStudyTime,1); ELSE UPDATE t_stage_info SET end_time=firstEndTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=1; END IF; #更新第二阶段数据 IF id2_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,firstEndTime,endTime,sumStudyTime,targetStudyTime,2); ELSE UPDATE t_stage_info SET end_time=endTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=2; END IF; #当学到第三阶段时 ELSEIF sumStudyTime>14 THEN #如果thirdEndTime为空则取最后学习的时间 SET thirdEndTime = CASE WHEN thirdEndTime IS NULL THEN endTime ELSE thirdEndTime END; #更新第一阶段数据 IF id1_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,startTime,firstEndTime,sumStudyTime,targetStudyTime,1); ELSE UPDATE t_stage_info SET end_time=firstEndTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=1; END IF; #更新第二阶段数据 IF id2_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,firstEndTime,secEndTime,sumStudyTime,targetStudyTime,2); ELSE UPDATE t_stage_info SET end_time=secEndTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=2; END IF; #更新第三阶段数据 IF id3_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,secEndTime,thirdEndTime,sumStudyTime,targetStudyTime,3); ELSE UPDATE t_stage_info SET end_time=thirdEndTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=3; END IF; END IF; end if; UNTIL done END REPEAT; close cur1;

    END

    现在执行了2小时才有了10几万数据,

    我在t_person_plan_record 表里对‘person_plan_id ’建了索引,

    在表t_stage_info 对person_plan_id ’建立了索引,其他我就不知道怎么优化了,

    请问大神,还能怎么优化比较好呢?

    展开全文
  • c# 执行存储过程慢

    2015-01-14 09:25:33
    [img=https://img-bbs.csdn.net/upload/201501/14/1421198696_601888.png][/img] SqlCommand comm = new SqlCommand("存储过程", connm); comm.CommandTimeout = 0; comm.Parameters.AddRange(pas); comm....
  • 我的程序执行一个存储过程(里面就只有一下查询语句,没有游标,也没有insert/update之类的操作)。之前执行都没有问题,也很快,就是最近经常超时,且非常。有时连查询分析器执行都要比之前很多。 在网上查了...
  • MySQL存储过程 Mysql储存过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中, 当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了, 简而言之就是一组已经写...
  • 3.把存储过程里的查询单独拿出来查询速度很快,但是放在存储过程函数中就很。2.原因:数据库表中的字段是utf-8,而数据库字符集后来改成了utf8mb4。存储过程中定义参数时,没有指定字符集,会默认读取创建存储过程...
  • mysql存储过程的解决方法:首先打开my.cnf配置文件;然后添加配置【long_query_time=1】;接着通过【tail -f /tmp/logs/mysqld.log】命令监控sql;最后进行针对性的优化即可。解决方法:第一步:修改/etc/my.cnf...
  • 其实这个问题是以前同一个客户遇见的问题,当时一个工程师解决后记录的过程如下:应用同事反映但是对应到执行存储过程,执行了2,3个小时了,还没出来结果。存储过程主要是执行一条update sql语句,单独将语句拿出来...
  • 今天一个生成10w条数据...会为该存储过程生成一个基于输入参数的执行计划,因此如果第一次输入的参数不具有代表性(例如大部分查询输入的参数都是A值,但第一次执行存储过程时输入的是B值),就有可能比即席查询,尽...
  • 业务反馈线上一个存储过程执行很,导致业务超时较多,而存储过程比较简单,就是一个简单的判断逻辑然后delete一条记录,而且delete语句是有索引的。表结构如下:CREATE TABLE `table1` (`BaseName` varchar(255) ...
  • 曾经发现这样一种情况,存储过程中的语句提取出来单独执行很快,但在存储过程中执行就很。----************* 存储过程中的语句,变量为 avc_acct_monthSELECT 2101,B.BUNDLE,COUNT( Distinct CASE WHEN (substr...
  • 如果项目的存储过程较多,书写又没有一定的规范,将会影响以后的系统维护困难和大存储过程逻辑的难以理解,另外如果数据库的数据量大或者项目对存储过程的性能要求很,就会遇到优化的问题,否则速度有可能很。...
  • 问题描述:开发了一个功能,因数据关联比较复杂,所以写了存储过程。  查询1万多条数据:在数据库直接执行存储过程耗时2秒,在测试系统运行,也是3、5秒就显示结果了。  发布到正式系统,发现运行非常非常(5...
  • 直到我去实习了,在优化的过程中,才发现自己很无知,知识很局限。为此... 文章 优惠券发放 2018-12-01 1812浏览量 MYSQL MyISAM表锁 锁是计算机协调多个进程或线程并发访问某一资源的机制 。在数据库中,除传统的 ...
  • 当数据量太大,且需要实时查询时,会严重影响数据库性能,查询速度也会很,不利于数据展示效率的提高,此时,建议在数据库中通过存储过程新建一张临时表,将需要查询的结果数据插入到临时表中,然后调度此存储过程...
  • 同步一张张的数据进库,,但是发现效率非常底,大概在每秒10条左右,,不知道哪儿的问题!插入表的索引已经去掉了,求帮助!BEGINDECLAREcountINTDEFAULT0;DECLAREorderSnVARCHAR(30)...同步一张张的数据进库,,...
  • 存储过程执行的原因

    千次阅读 2019-05-16 11:17:00
    存储过程执行很,单独拎出来执行就很快1.一开始是直接写的存储过程,然后执行,卡了很久,大概10分钟左右才执行出来2.后面我尝试将插入的数据插入到临时表中,大概5秒就执行出来了3.但我发现,执行出来的结果跟我...
  • .NET调用存储过程时,有时候会变的很甚至会timeout,但是再执行一下存储过程,再调用就会很快。   解决办法: 1. 在可能比较耗时的语句后面加上option(recompile) 2. 创建存储过程时在其定义中指定 WITH ...
  • killsql的存储过程

    2020-11-09 10:57:57
    killsql的存储过程 创建存储过程 定义变量 查询mysql进程 循环select集, 拼接kill语句 执行sql语句 调用存储过程 call killsql() CREATE PROCEDURE `killsql`() BEGIN DECLARE v_sql_1 VARCHAR(500); ...
  • 项目使用的是sqlserver数据库,每运行一段时间存储过程就会变,同一个存储过程,在传入不同参数的情况下,有的情况下执行快,有的执行。莫名其妙,一直找不到原因, 后来每次变手动编译存储过程, sp_...
  • 一、执行计划情况当存储过程挂住的时候,看看V$SESSION里面的 SQL_ID, SQL_CHILD_NUMBER再根据这两个信息用DBMS_XPLAN.DISPLAY_CURSOR把计划拿出来看看。SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('gwp663cqh5...
  • SQL Server在存储过程执行之前都会制定一个执行计划。在上面的例子中,SQL在编译的时候并不知道@thedate的值是多少,所以它在执行执行计划的时候就要进行大量的猜测。假设传递给@thedate的参数大部分都是非空字符串...
  • 存储过程速度

    2013-04-26 01:31:09
    create or replace PROCEDURE C_CLOSE_ERROR_SO( ccn IN VARCHAR2 ,soNum IN VARCHAR2 ...就这一条更新语句,速度非常,表SO的主键是SALES_CCN、SO、SO_LINE,如果不用存储过程就非常快,不知道是什么原因。
  • 发表于2015-3-10 11:07|来自51CTO网页引用:原帖由 UltraSQL 于 2015-3-9 23:48 发表 麻烦楼主把查询语句和执行计划贴出来!SELECTrow_number() over (order by t2.医生姓名) 序号,t2.医生代码,t2....
  • 我把存储过程里面代码复制出来执行,也是正常时间出结果,请教高手怎么解决我的存储过程执行的问题? /* 撰写人:**** 创建时间:2013-07-05 数据库:BiDataBase 执行时间:2'10'' 格式:exec MPVip01_...
  • 写的存储过程包和主体: CREATE OR REPLACE PACKAGE BODY QUN_STUDY IS ------------------------------ --插入新数据-- --author:xiaohe-- --date:2009-11-21-- PROCEDURE INSERT_T_QUN_STUDY(P_ID IN NUMBER, P_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,438
精华内容 975
关键字:

存储过程慢