Teradata-如何选择而不锁定写入程序?(访问锁定行与访问锁定表)
我正在开发一个从Teradata DWH获取一些数据的应用程序。DWH开发人员告诉我在所有Teradata-如何选择而不锁定写入程序?(访问锁定行与访问锁定表),teradata,rowlocking,table-locking,Teradata,Rowlocking,Table Locking,我正在开发一个从Teradata DWH获取一些数据的应用程序。DWH开发人员告诉我在所有SELECT查询之前使用LOCK ROW FOR ACCESS,以避免延迟对该表的写入 由于非常熟悉MS SQL Server的with(NOLOCK)提示,我认为为ACCESS锁定行是它的等价物。但是,INSERT或UPDATE语句不允许使用锁行访问(我不清楚为什么会失败,因为它应该应用于语句选择的表,而不是我插入的表): 我已经看到了锁定表。。。可以使用FOR ACCESS,但不清楚它是否符合我的需要(
SELECT
查询之前使用LOCK ROW FOR ACCESS
,以避免延迟对该表的写入
由于非常熟悉MS SQL Server的with(NOLOCK)
提示,我认为为ACCESS锁定行
是它的等价物。但是,INSERT
或UPDATE
语句不允许使用锁行访问
(我不清楚为什么会失败,因为它应该应用于语句选择的表,而不是我插入的表):
我已经看到了锁定表。。。可以使用FOR ACCESS
,但不清楚它是否符合我的需要(NOLOCK
等效-不要阻止写入)
问题:在
INSERT
语句中选择时,我应该使用什么提示来最小化写入延迟?您不能在INSERT-SELECT语句中使用锁定行进行访问。INSERT语句将对正在写入的表设置写锁,对正在选择的表设置读锁
如果在插入式选择中获得<代码>锁定行用于访问< /代码>,则必须考虑创建一个视图:
CREATE VIEW tmpView_PersistentTable AS
LOCK ROW FOR ACCESS
SELECT Cols FROM PersistentTable;
然后从视图中执行插入选择:
INSERT INTO SomeVolatile
SELECT Cols FROM tmpView_PersistentTable;
您不能在INSERT-SELECT语句中使用锁定行访问
。INSERT语句将对正在写入的表设置写锁,对正在选择的表设置读锁
如果在插入式选择中获得<代码>锁定行用于访问< /代码>,则必须考虑创建一个视图:
CREATE VIEW tmpView_PersistentTable AS
LOCK ROW FOR ACCESS
SELECT Cols FROM PersistentTable;
然后从视图中执行插入选择:
INSERT INTO SomeVolatile
SELECT Cols FROM tmpView_PersistentTable;
这不是一个直接的答案,但我一直认为这是用户/应用程序/etc应该通过视图访问数据的原因之一。视图锁定访问
,这不会阻止插入/更新。从表中选择将使用读锁,这将阻止插入/更新
缺点是使用访问锁,存在脏读的可能性。这不是一个直接的答案,但我一直认为这是用户/应用程序/etc应该通过视图访问数据的原因之一。视图锁定访问,这不会阻止插入/更新。从表中选择将使用读锁,这将阻止插入/更新
缺点是使用访问锁,存在脏读的可能性。如下更改您的查询,您应该会做得很好
LOCKING TABLE PersistentTable FOR ACCESS
INSERT INTO SomeVolatile
SELECT Cols
FROM PersistentTable ;
按以下方式更改您的查询,您应该很好
LOCKING TABLE PersistentTable FOR ACCESS
INSERT INTO SomeVolatile
SELECT Cols
FROM PersistentTable ;
使用视图是一个很好的建议。不幸的是,我不允许执行更改,但我可以要求MDW开发人员将我正在访问的表包装到“lock row for access”视图中。@Alexei:在Teradata环境中,大多数最终用户只能访问1:1视图,包括lock row access,因此这些视图可能已经存在。此外,除非您选择使用源表的PI,否则锁行/表之间没有区别。顺便说一句,MDW=来自德国的大型零售商?@dnoeth-哦,对不起。MDW=主数据仓库。我曾在几家本地公司看到它被用作首字母缩略词,我认为这是一个已知的首字母缩略词,但你和谷歌证明我错了。是的,这是关于DE的数据仓库中的一家大型零售商。@dnoeth-关于视图,我将与仓库开发人员核实。我正在处理的表包含有关安装、ETL对象、表/视图等的元数据信息,任何普通用户都不会使用这些表。谢谢。@Alexei:MDW中的M不是大师,而是公司名称:-)使用视图是一个很好的建议。不幸的是,我不允许执行更改,但我可以要求MDW开发人员将我正在访问的表包装到“lock row for access”视图中。@Alexei:在Teradata环境中,大多数最终用户只能访问1:1视图,包括lock row access,因此这些视图可能已经存在。此外,除非您选择使用源表的PI,否则锁行/表之间没有区别。顺便说一句,MDW=来自德国的大型零售商?@dnoeth-哦,对不起。MDW=主数据仓库。我曾在几家本地公司看到它被用作首字母缩略词,我认为这是一个已知的首字母缩略词,但你和谷歌证明我错了。是的,这是关于DE的数据仓库中的一家大型零售商。@dnoeth-关于视图,我将与仓库开发人员核实。我正在处理的表包含有关安装、ETL对象、表/视图等的元数据信息,任何普通用户都不会使用这些表。谢谢。@Alexei:MDW中的M不是大师,是公司名:-)