http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4079|回复: 8

[其他] 程序执行大量sql语句,请大神指点该如何优化

[复制链接]
发表于 2016-12-27 09:59:27 | 显示全部楼层 |阅读模式
服务器是阿里云8核16g,程序需要在晚上十二点进行数据计算,计算过程中,cpu使用100%,计算完成之后一个小时内,用户反映系统特别卡,请大神指点该怎么优化。
现在程序的调用方法是:
[C#] 纯文本查看 复制代码
/// <summary>
        /// 执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// <param name="SQLStringList">多条SQL语句</param>		
        public static int ExecuteSqlTran(List<String> SQLStringList)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                SqlTransaction tx = conn.BeginTransaction();
                cmd.Transaction = tx;
                try
                {
                    int count = 0;
                    for (int n = 0; n < SQLStringList.Count; n++)
                    {
                        string strsql = SQLStringList[n];
                        Log.xierizhi2(strsql);
                        if (strsql.Trim().Length > 1)
                        {
                            cmd.CommandText = strsql;
                            count += cmd.ExecuteNonQuery();
                        }
                    }
                    tx.Commit();
                    return count;
                }
                catch
                {
                    tx.Rollback();
                    return 0;
                }
            }
        }


SQLStringList里面有12万条sql语句,拼接SQLStringList花了差不多90秒,ExecuteSqlTran执行了70秒,搞不懂是这个方法不够优化,还是访问量太大造成的系统卡,请各位指点。@站长苏飞


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2016-12-27 10:11:53 | 显示全部楼层
执行的慢一点可以,另外使用Sql优化顾问做个监控,然后建一下统计,和索引应该会好很好
发表于 2016-12-27 10:16:42 | 显示全部楼层
循环执行太快了应该是,中间加个时间间隔应该会好很多
 楼主| 发表于 2016-12-27 10:18:43 | 显示全部楼层
客服~小小 发表于 2016-12-27 10:11
执行的慢一点可以,另外使用Sql优化顾问做个监控,然后建一下统计,和索引应该会好很好

谢谢,执行慢一点可以 是什么意思?是说这个速度正常么?
 楼主| 发表于 2016-12-27 10:21:23 | 显示全部楼层
站长苏飞 发表于 2016-12-27 10:16
循环执行太快了应该是,中间加个时间间隔应该会好很多

是ExecuteSqlTran 这个方法执行的太快了吗?
[C#] 纯文本查看 复制代码
public static int ExecuteSqlTran(List<String> SQLStringList)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                SqlTransaction tx = conn.BeginTransaction();
                cmd.Transaction = tx;
                try
                {
                    int count = 0;
                    for (int n = 0; n < SQLStringList.Count; n++)
                    {
                        string strsql = SQLStringList[n];
                        Log.xierizhi2(strsql);
                        if (strsql.Trim().Length > 1)
                        {
                            cmd.CommandText = strsql;
                            count += cmd.ExecuteNonQuery();
                        }
                        System.Threading.Thread.Sleep(20);
                    }
                    tx.Commit();
                    return count;
                }
                catch
                {
                    tx.Rollback();
                    return 0;
                }
            }
        }


这样可以吗?
发表于 2016-12-27 10:52:04 | 显示全部楼层
循环,你的循环中间是没有时间间隔了,如果太多,相当于死循环了。循环每执行一次加个时间暂时一下
发表于 2016-12-27 10:53:18 | 显示全部楼层
Thread.Sleep(1000); 放到循环最下面这表示 一秒执行一次。当然时间上你自己控制,
 楼主| 发表于 2016-12-27 11:20:20 | 显示全部楼层
站长苏飞 发表于 2016-12-27 10:53
Thread.Sleep(1000); 放到循环最下面这表示 一秒执行一次。当然时间上你自己控制,

飞哥,还是没搞懂,是拼接 SQLStringList 的循环里面加个间隔,还是在执行 ExecuteSqlTran方法中的循环里面加个间隔?@站长苏飞
发表于 2016-12-27 13:33:43 | 显示全部楼层
执行的时候,你循环执行每秒可能发送上百个Sql语句这样会给数据库造成很大的压力,所以加个一个Thread.Sleep(1000);是控制一下发送的频率,
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-23 05:33

© 2014-2021

快速回复 返回顶部 返回列表