首先,我不是AS 400的人.所以请原谅我在这里问任何无用的问题.
基本上,我正在开发一个.Net应用程序,需要访问AS400以获取一些实时数据.虽然我有系统工作,但我在查询之间得到了非常不同的性能结果.通常,当我在AS400上针对SPROC发出第一个请求时,我看到了大约14秒的时间来获取完整的数据集.在初始呼叫之后,任何后续呼叫通常只需要约1秒钟才能返回.这种性能提升大约需要20分钟左右才能再次使用14秒.
有趣的是,如果存储过程直接在iSeries Navigator上执行,它总是在几毫秒内返回(响应时间没有变化).
我想知道它是否是一个缓存/执行计划问题,但我只能将我的sql SERVER逻辑应用于AS400,这并不总是匹配.
当我使用iSeries数据提供程序用于.Net时,有什么建议可以做些什么来收到更一致的响应时间或只是洞察AS400为什么会以这种方式行事?我应该使用更好的访问方法吗?
以防万一,这是我用来连接AS400的代码
Dim Conn As New IBM.Data.DB2.iSeries.iDB2Connection(ConnectionString) Dim Cmd As New IBM.Data.DB2.iSeries.iDB2Command("SPROC_NAME_HERE",Conn) Cmd.CommandType = CommandType.StoredProcedure Using Conn Conn.Open() Dim Reader = Cmd.ExecuteReader() Using Reader While Reader.Read() 'Do Something End While Reader.Close() End Using Conn.Close() End Using
编辑:在看了一下这个问题并使用下面的一些评论后,我开始怀疑我是否因为连接池的收益而遇到这个问题?思考?
解决方法
我发现Redbook
Integrating DB2 Universal Database for iSeries with Microsoft ADO .NET对于诊断这些问题非常有用.
具体来看客户端和服务器端跟踪以帮助隔离问题.并且不要害怕致电IBM软件支持.他们可以帮助您设置分析以找出问题.