以编程方式设置数据库连接优先级

3
我们有一个C#应用程序,打开多个ODBC连接到不同的数据库(大多数是Oracle和SQL Server)。
有没有一种方法可以编程告诉数据库将最高优先级给哪个连接?
例如,如果我有Con1,Con2和Con3都连接到ODBC数据库,我希望能够告诉数据库将Con2作为最高优先级而不是其他任何连接,以便它将首先优先处理该工作负载。
虽然我可以设置C#线程优先级,但这并不起作用,因为虽然C#线程可能运行得最快,但它仍然只能以底层数据库连接的速度运行(除非我错了,C#线程优先级是经过传递的?)。

很好的问题。我经常自己想这个问题。如果每个人都将他们的连接设置为“最高”优先级,那会有什么影响呢? - Free Coder 24
1
我的目标不清楚。难道你最终不需要运行所有查询吗?如果是这样,那么优先队列就可以完成工作。由于工作是在单独的数据库服务器上完成的,所以顺序很重要吗?如果是这种情况,C#中内置的“async”功能将满足您的需求。如果您真的担心处理结果,仍然似乎优先队列是您的好朋友...但是在IDataReader或DataTable对象上,而不是在连接上。 - Joel Coehoorn
有没有办法通过编程告诉数据库优先考虑哪个连接?每个连接都可以为您的应用提供服务吗?如果不能,为什么还有其他连接存在?如果可以,那么如何区分优先级和偏好?只需在“你方”的代码中选择所需的连接来连接。优先级是为为许多客户提供服务的服务器而设定的,并非为选择操作的客户端而设定。我将根据您的解释给予否定评价。 - Saic Siquot
1个回答

1
我从未使用过它,但听起来你可以使用Oracle的数据库资源管理器为不同的会话分配不同的优先级。
在具有运行具有不同优先级作业的多个并发用户会话的环境中,不能平等地处理所有会话。资源管理器使您能够根据会话属性将会话分类到组中,并以优化应用程序环境的硬件利用率的方式为这些组分配资源。
这个相关问题提到了SQL Server的资源管理器
如果你想在两个不同的数据库系统,如Oracle和SQL Server之间设置优先级,我认为这可能会缺乏灵活性。我能想到的最好方法是将其中一个数据库系统的进程优先级设置为较低。资源管理器和调度器似乎可以让您限制任何一个查询可以使用多少资源,但这可能会导致没有其他任务的情况下,低优先级任务结束时留下一些未使用的处理器速度。

它是否允许我们在异构的DBMS集合中设置优先级(确切地说,是非Oracle的)? - Failed Scientist
1
我怀疑在设置异构数据库会话的优先级方面可能会不够灵活,@TalhaIrfan,但我已经在我的答案中添加了一些建议。 - Don Kirkby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接