系统数据库和源程序是放在一台服务器的,还是服务器专用,我有两个报表,开始运行好好的,最近可能数据多了,查询会出现超时,我用SQL工具检测到这个存储过程,在SQL中运行10次,基本都是稳定在1s
但是用代码调试,却显示超时,
var db = SqlDatabase.Create("TY_PMS_Content"); var cmd = db.GetStoredProcCommand(stored_name); db.AddInParameter(cmd, "bidder_company_no", DbType.Int32, bidder_company_no); db.AddInParameter(cmd, "startTime", DbType.DateTime, startTime); db.AddInParameter(cmd, "endTime", DbType.DateTime, endTime); db.AddInParameter(cmd, "dep_no", DbType.Int32, dep_no); db.AddInParameter(cmd, "node_no", DbType.Int32, node_no); db.AddInParameter(cmd, "user_no", DbType.Int32, user_no); return db.ExecuteDataTable(cmd);
执行存储过程的代码前没有任何逻辑,非常费解,请大家帮忙指导下,是否有遇到过同样的情况,能否提供一点查询思路
执行的SQL方法如下:
/// <summary> /// 执行命令 /// </summary> /// <param name="command">命令对象</param> /// <returns>DataSet</returns> public override DataSet ExecuteDataSet(DbCommand command) { DataSet ds = new DataSet(); using (MySqlConnection con = (MySqlConnection)this.CreateConnection()) { command.Connection = con; MySqlDataAdapter da = new MySqlDataAdapter((MySqlCommand)command); con.Open(); da.Fill(ds); } return ds; }
通过 SQL PROFILE 跟踪下数据库性能看。
跟踪了,发现正常是这样的,不正常的时候是空白
这没看出异常
@许爱生活: 如果这里消耗的资源是你可接受的,那么问题可能在别的地方,比如DEBUG状态的应用,网络的状况、构建数据库访问对象的过程等。
还有一种情况:如果SQL在调试,这个时候会阻塞访问。
@519740105: 在用SQLHeper 执行看看过程,原本的是封装的, 另外问下 DEBUG状态的应用 这个是什么?
@许爱生活: 你的应用如果是DEBUG方式运行的,性能也会有影响。
@519740105: thankyou 按这思路我在调试一步步看
@许爱生活: 8k7
@519740105: 解决了,但是不明确解决原因,作为结贴做下补充说明,希望能给碰到同样坑的人一点解决思路,解决途径如下:
1:用SQLPROFILE 测试,发现虽然执行速度是1s,但是占用的资源数异常高(对具体的不了解,采用的是对比其他查询显示正常的语句)
2:对存储过程进行隔句注释(也是对比正常的语句想到),发现where条件有个条件注释掉了就正常了,对比没发现原因,就将这个条件移到前面的查询中,瞬间正常了
结论,可以试着注释,可能是嵌套多了,本质原因还没有找到