Teradata-如何选择而不锁定写入程序?(访问锁定行与访问锁定表)

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,但不清楚它是否符合我的需要(

我正在开发一个从Teradata DWH获取一些数据的应用程序。DWH开发人员告诉我在所有
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不是大师,是公司名:-)