返回首页

gbase数据、南大通用产品文档:GBase8a大量业务长时间卡在checking permissions

更新日期:2024年09月11日

问题现象
show processlist 时,有业务一直在checking permissions
解决方法:
1.查看该SQL 的执行节点IP 和对应的ID
gbase> show processlist;
|269 | root | localhost | testdb | Query | 16 | checking permissions | alter
table t1 add column name varchar(100) |
上面这一行的第一个字段【269】就是SQL 的id,第三个字段【localhost】就是
对应的ip,这里是本机,如果是其他节点会显示对应的ip
2.通过gcadmin showlock 查看对应id 的集群锁情况:
$gcadmin showlock | grep 269
或许会得到多组结果,找出第五个字段为【FALSE】的哪一行。如:
| vc00001.testdb.t1.meta_lock
|10.0.2.101|269(LWP:21694)|20211222145941|FALSE | S |
由上面的语句可以判断出为vc00001.testdb.t1.meta_lock 是这个锁
3.查看锁的持有者
继续通过gcadmin showlock 查看锁持有者的情况
$ gcadmin showlock | grep vc00001.testdb.t1.meta_lock
| vc00001.testdb.t1.meta_lock
|10.0.2.101|342(LWP:15618)|20211222145916| TRUE | E |
由上面语句可以判断出vc00001.testdb.t1.meta_lock 这个锁的持有者为

功能说明
TRUNCATE TABLE 在功能上与不带WHERE 子句的DELETE 语句相同,
二者均
删除表中的全部行。
但TRUNCATE TABLE 比DELETE 速度快,
且使用的系统资
源和事务日志资源少。
TRUNCATE TABLE 属于DDL 语法,
DELETE FROM table_name 属于DML 语法。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不
变。
语法格式
TRUNCATE TABLE [vc_name.][database_name.]table_name
表5- 59 参数说明
参数名称


vc_name
虚拟集群名称,可选项;
database_name
是要删除表隶属的数据库名称,可选项;省略此参数,即为
USE database_name 后的数据库名称。
table_name
是要删除其全部行的表的名称。
示例
示例1:删除表t 中的所有数据。
gbase> USE test;
Query OK, 0 rows affected
gbase> CREATE TABLE t (a decimal(12,5) DEFAULT NULL, KEY idx_a (a)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
985
USING HASH global);
Query OK, 0 rows affected
gbase> INSERT INTO t VALUES(1),(2),(3);
Query OK, 3 rows affected
Records: 3
Duplicates: 0
Warnings: 0
gbase> SELECT * FROM t;
+---------+
| a
|
+---------+
| 1.00000 |
| 2.00000 |
| 3.00000 |
+---------+
3 rows in set
gbase> TRUNCATE TABLE t;
Query OK, 3 rows affected
gbase> SELECT * FROM t;
Empty set

ifx_var_flag() 函数确定如何为 lvarchar 或 var binary 主变量的数据缓冲区分配内存。


语法
var binary
mint ifx_var_flag(var_bin, flag)
var binary **var_bin;
int2 flag;

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 816 -

lvarchar
mint ifx_var_flag(lvar, flag)
lvarchar **lvar;
int2 flag;

flag
分配标志的 int2 值,或为 0,或为 1。
var_bin
var binary 主变量的地址。
lvar
lvarchar pointer 主变量的地址。

用法
flag 参数的值是分配标志。它确定由谁来为 var_bin 主变量的数据处理内存分配,如
下:
当 flag 为 1 时,GBase 8s ESQL/C 自动地执行此内存分配。
当您不确定 SELECT 返回的数据量时,
在 SELECT 语句之前,
您可使用 flag 值
1。
当 flag 为 0 时,GBase 8s ESQL/C 不自动地执行此内存分配。
当您设置标志为 0 时,
您必须以 ifx_var_alloc() 函数为 lvar 或 var_bin 变量的数据
缓冲区分配内存。

如果您不为 lvarchar 或 var binary 主变量调用 ifx_var_flag() 函数,则 GBase 8s
ESQL/C 为它的数据缓冲区分配内存。或者您为 lvarchar 或 var binary 变量分配内存,
或者允许 GBase 8s ESQL/C 为您分配,您必须以 ifx_var_dealloc() 函数释放该内存。

返回代码
0
函数成功。
<0
函数不成功,且返回值指示错误的原因。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 817 -