在创建设计时锁定表/投影

时间:2016-10-06 12:16:53

标签: logging locking projection vertica

我有一个关于锁定表/查询的问题。

  1. 在设计新投影的过程中(以编程方式或在Admintools中使用DBDesigner),Vertica会锁定某些表格或投影吗?这里我指的是新设计中涉及的表格/投影。我怀疑在设计过程中原始表/投影必须处于一致状态,因此表/投影的内容在设计过程中始终是相同的(这意味着表/投影是只读的) 。问题是在设计期间无法写入数据库。

  2. 有没有办法在日志文件中观察它?我浏览了vertica.log,但没有关于锁定表/投影的信息。

  3. 有没有办法绕过锁定?在设计过程中,我也希望与数据库一起正常工作(编写,更新)。

  4. 我希望问题清楚。如果没有,我指定更多。

2 个答案:

答案 0 :(得分:1)

这是我的理解。我仍然会先测试,但根据我的观察......

  1. 只有目标投影获得X锁定。表(和其他投影)应该可用于其他DML操作。

  2. lockslock_usage系统视图中可以看到任何锁定。我不认为你会在日志中看到这一点(虽然可能有一个日志选项来启用该级别的详细信息,可能需要请求支持)。

  3. 由于它没有锁定,你应该没问题。但是,如果我错了并且确实出现问题,则必须复制表格,添加新投影,刷新,然后ALTER TABLE T1, T2, temps RENAME TO temps, T1, T2;进行交换。然后DML更新您在此期间对数据所做的任何更改。

  4. 现在,如果在刷新时插入,它将会显着减慢投影刷新速度。

答案 1 :(得分:0)

如果使用“增量设计”选项运行数据库设计器,则会创建其他投影。 但是,如果使用“综合设计”选项运行数据库设计器,则会删除不需要的投影,并使用新投影替换旧投影。

在这两种情况下,由于数据库设计者启动新会话并创建单独的工作空间,因此不会对表执行锁定。在此工作空间中,数据被分析以得出适当的数据 列所需的编码和压缩可以提高数据库中的投影性能。

您可以在路径
上检查数据库设计器日志 /home/dbadmin/designer.log

2016-11-30 05:26:05 [Designer.sendCommand] Executing: select dbd_create_workspace('tet1',True);
2016-11-30 05:26:05 [Designer.sendCommand] Status: 0. Result: ['0']
2016-11-30 05:26:05 [Designer.send_sql_text] Sending SQL: select dbd_create_design('tet1','tet1');
select dbd_set_design_ksafety('tet1','tet1','0');
select dbd_set_optimization_objective('tet1','tet1','Load');
2016-11-30 05:26:05 [Designer.sendCommand] Sending commands in /home/dbadmin//command.sql
2016-11-30 05:26:05 Setting search path: SET search_path=sid,public;
2016-11-30 05:26:05 [Designer.sendCommand] Executing: select dbd_create_design('tet1','tet1');
2016-11-30 05:26:06 [Designer.sendCommand] Status: 0. Result: ['0']
2016-11-30 05:26:06 [Designer.sendCommand] Executing: select dbd_set_design_ksafety('tet1','tet1','0');
2016-11-30 05:26:06 [Designer.sendCommand] Status: 0. Result: ['0']
2016-11-30 05:26:06 [Designer.sendCommand] Executing: select dbd_set_optimization_objective('tet1','tet1','Load');
2016-11-30 05:26:06 [Designer.sendCommand] Status: 0. Result: ['0']
2016-11-30 05:26:06 Design schemas are: sid
2016-11-30 05:26:06 [Designer.send_sql_text] Sending SQL: select dbd_add_design_tables('tet1','sid.*');
2016-11-30 05:26:07 Examining table data...
2016-11-30 05:26:07 [Designer.fPrint] Output: 
    Examining table data..