我必须清理数据库(几个具有给定条件的表,其中条件的列总是相同的)例如
delete from table1 where date < given_date1 and id = given_id
delete from table2 where date < given_date2 and id = given_id
其中 given_id 和 givendate 关系在逐个表和逐个 id 上各不相同。
实际的删除条件并不总是 where date < givendate ,我只是写了一个例子,所以说一个 id 有 300 天的数据,而另一个 500 天的数据, where 条件允许删除 oldes 10 天的数据 where 10 是一个变量,基于用户输入,因此在一次迭代中,所有节点都通过删除最旧的 10 天数据进行处理,因此查询每个 id 的更改,但事实是它将位于同一组表上
早些时候该脚本被编写为 sql 脚本并执行其操作但需要时间,现在我已经实现了一个多线程 Java 应用程序,其中新代码看起来像
for(i=0; i < idcount ; i++)
{
//launch new thread and against that thread call
delete(date,currentid);
}
function delete(date,id)
{
delete from table1 where date < given_date and id = given_id
delete from table2 where date < given_date and id = given_id
}
在实现这个之后,我发现了 sql 表上的死锁,这是通过索引表来解决的,但它仍然不像它应该的那样快,如果我有 500 个线程,它们都会一个接一个地启动,并且显然在相同的集合上运行桌子。并且 sql 实际上并没有在每个表上并行执行?
当我监控我的 java.exe 和 sqlserver.exe 时,它根本不忙吗?我希望它应该是。
谁能告诉我在同一组表上实现多线程删除的最佳方法是什么,这样我就可以启动线程并并行删除并消耗可用资源