【发布时间】:2013-02-11 19:22:43
【问题描述】:
我有一个分隔文件,用于通过 .net 应用程序在 sql server 表中插入/更新记录。 该文件有大约 80000 条记录,每天都会处理。 我的问题:在我旋转 80000 行中的每一行时保持与数据库的连接打开是否安全甚至明智,或者我应该关闭连接并在每次循环迭代时重新打开?这本身听起来很麻烦。 但是,我担心长时间保持打开的连接、持有锁和不必要地占用内存。 什么是更可扩展、更安全和更明智的方法?
【问题讨论】:
-
请定义“很长时间”:小时?这是在一个事务中运行吗?你指的是什么锁?你在哪里用完内存,在 sql 中还是在应用程序服务器中?我不敢要求详细说明更具可扩展性和安全性......
-
目前我有用于测试的样本大约需要一个小时才能完成。但是,如果当我将它移到生产环境时实际文件会增长,它会更长。我没有使用单笔交易。
-
你的 sqlserver 是否已满?它可以处理一名额外的工人吗?顺序重要吗?
-
该表位于一个企业应用程序访问的数据库中,在任何给定时间平均约有 10-15 [有时更多] 用户。企业数据库有自己的计划任务,这些任务在一天中的不同时间运行。我会假设所有这些都已经在 sql 服务器上造成了负载。我的进程需要在 Windows 中作为计划任务运行。我不认为 sql server 已经用尽了,但我只是不想冒险。我想顺序并不重要。
-
读取每一行,将每一行放在一个 msmq 中,启动一个读取队列并存储到 sql 中的工作人员,只要处理时间减少就继续添加工作人员......工作人员可以一个应用服务器上的线程,或不同应用服务器上的进程
标签: .net sql-server ado.net