返回首页

gbase数据、南大通用产品文档:GBase8a新增表

更新日期:2024年09月11日

该功能与企业管理器创建表功能一致,依次填写表单信息,进行表创建操
作。

SHOW ERRORS
语法格式
SHOW ERRORS [LIMIT [offset,] row_count]
说明

SHOW COUNT(*) ERRORS 语句和SHOW WARNINGS 相似,只是显示的内容不是警
告和注意,而是仅仅显示错误。

LIMIT 子句与在SELECT 语句中语法相同,请参考SELECT 语法。
SHOW COUNT(*) ERRORS
语句显示错误的数目,也可以从error_count 变量中获得错误数:
SHOW COUNT(*) ERRORS;
SELECT @@error_count;

乐观OCC 与悲观2PL
悲观2PL(2 阶段锁定)和乐观并发控制(OCC)的功能差异在于对事务完整性分别采
用悲观和乐观方法。
基于磁盘的表使用悲观方法,
这是最常用的数据库方法。
MOT 引擎使用的是乐观方法。
悲观方法和乐观方法的主要功能区别在于,如果冲突发生,

悲观的方法会导致客户端等待;

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
485

而乐观方法会导致其中一个事务失败,使得客户端必须重试失败的事务。
乐观并发控制方法(MOT 使用)
乐观并发控制(OCC)方法在冲突发生时检测冲突,并在提交时执行验证检查。
乐观方法开销较小,
而且通常效率更高,
原因之一是事务冲突在大多数应用程序中并不
常见。
当强制执行REPEATABLE READ 隔离级别时,乐观方法与悲观方法之间的函数差异更
大,而当强制执行SERIALIZABLE 隔离级别时,函数差异最大。
悲观方法(MOT 未使用)
悲观并发控制(2PL,或称2 阶段锁定)方法使用锁阻止在潜在冲突的发生。执行语句
时应用锁,提交事务时释放锁。
基于磁盘的行存储使用这种方法,并且添加了多版本并发控
制(Multi-version Concurrency Control,MVCC)。
在2PL 算法中,当一个事务正在写入行时,其他事务不能访问该行;当一个行正在读
取时,其他事务不能覆盖该行。在访问时锁定每个行,以进行读写;在提交时释放锁。这些
算法需要一个处理和避免死锁的方案。
死锁可以通过计算等待图中的周期来检测。
死锁可以
通过使用TSO 保持时序或使用某种回退方案来避免。
遇时锁定(ETL)
另一种方法是遇时锁定(ETL),它以乐观的方式处理读取,但写入操作锁定它们访问
的数据。因此,来自不同ETL 事务的写入操作相互感知,并可以决定中止。实验证明,ETL
通过两种方式提高OCC 的性能:

首先,ETL 会在早期检测冲突,并通常能增加事务吞吐量。这是因为事务不会执行无
用的操作。(通常)在提交时发现的冲突无法在不中止至少一个事务的情况下解决。

其次,ETL 写后读校验(RAW)运行高效,无需昂贵或复杂的机制。
结论:
OCC 是大多数工作负载最快的选项。这一点我们在初步研究阶段已经发现。
其中一个原因是,当每个核执行多个线程时,
锁很可能被交换线程持有,
特别是在交互
模式下。另一个原因是悲观算法涉及死锁检测(产生开销),并通常使用读写锁(比标准自
旋锁效率低)。
我们选择Silo 是因为它比其他现有选项(如TicToc)简单,同时对大多数工作负载保
持相同的性能。ETL 有时比OCC 更快,但它引入了假中止,可能会使用户混淆,而OCC

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
486
则只在提交时中止。