云服务器内容精选

  • 查看和停止正在运行的查询语句 通过视图PG_STAT_ACTIVITY可以查看正在运行的查询语句。方法如下: 设置参数track_activities为on。 1 SET track_activities = on; 当此参数为on时,数据库系统才会获取当前活动查询的运行信息。 查看正在运行的查询语句。以查看正在运行的查询语句所连接的数据库名、执行查询的用户、查询状态及查询对应的PID为例。 1 SELECT datname, usename, state,pid FROM pg_stat_activity; 1 2 3 4 5 6 7 8 datname | usename | state | pid ----------+---------+--------+----------------- testdb | Ruby | active | 140298793514752 testdb | Ruby | active | 140298718004992 testdb | Ruby | idle | 140298650908416 testdb | Ruby | idle | 140298625742592 testdb | omm | active | 140298575406848 (5 rows) 如果state字段显示为idle,则表明此连接处于空闲,等待用户输入命令。 如果仅需要查看非空闲的查询语句,则使用如下命令查看: 1 SELECT datname, usename, state, pid FROM pg_stat_activity WHERE state != 'idle'; 若需要取消运行时间过长的查询,通过PG_TERMINATE_BACKEND函数,根据线程ID(即2中查询结果的pid字段)结束会话,请执行如下命令。 1 SELECT PG_TERMINATE_BACKEND(140298793514752); 显示如下信息,表示结束会话成功。 1 2 3 4 PG_TERMINATE_BACKEND ---------------------- t (1 row) 显示如下信息,表示用户执行了结束当前会话的操作。 1 2 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command gsql客户端使用PG_TERMINATE_BACKEND函数结束当前正在执行会话的后台线程时,如果当前的用户是初始用户,客户端不会退出而是自动重连,即返回“The connection to the server was lost. Attempting reset: Succeeded.”。否则客户端会重连失败,即返回“The connection to the server was lost. Attempting reset: Failed.”。这是因为只有初始用户可以免密登录,普通用户不能免密登录,从而重连失败。 对于使用PG_TERMINATE_BACKEND函数结束非活跃的后台线程时。如果打开了线程池,此时空闲的会话没有线程ID,无法结束会话。非线程池模式下,结束的会话不会自动重连。
  • 查看数据库中包含的表 在public Schema下新建以下表格。 gaussdb=# CREATE TABLE public.search_table_t1(a int) distribute by hash(a); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t2(b int) distribute by hash(b); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t3(c int) distribute by hash(c); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t4(d int) distribute by hash(d); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t5(e int) distribute by hash(e); CREATE TABLE 在PG_TABLES系统表中查看public Schema中包含的前缀为search_table的表。 1 gaussdb=# SELECT distinct(tablename) FROM pg_tables WHERE SCHEMANAME = 'public' AND TABLENAME LIKE 'search_table%'; 结果如下: 1 2 3 4 5 6 7 8 tablename ----------------- search_table_t1 search_table_t2 search_table_t3 search_table_t4 search_table_t5 (5 rows)
  • 查看数据库用户 通过PG_USER可以查看数据库中所有用户的列表,还可以查看用户ID(USESYSID)和用户权限。 1 SELECT * FROM pg_user; 1 2 3 4 5 6 usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valbegin | valuntil | respool | parent | spacelimit | useconfig | nodegroup | tempspacelimit | spillspacelimit ---------+----------+-------------+----------+-----------+---------+----------+----------+----------+--------------+------ -------+------------+-----------+-----------+----------------+----------------- roach | 10 | t | t | t | t | ******** | | | default_pool | 0 | | | | | (1 row)
  • 创建数据库用户 默认只有集群安装时创建的管理员用户可以访问初始数据库,您还可以创建其他数据库用户账号。 1 gaussdb=# CREATE USER joe WITH PASSWORD "********"; 当结果显示为如下信息,则表示创建成功。 1 CREATE ROLE 如上创建了一个用户名为joe,密码为********的用户。如下命令为设置joe用户为系统管理员。 gaussdb=# GRANT ALL PRIVILEGES TO joe; 使用GRANT命令进行相关权限设置,具体操作请参见GRANT。 关于数据库用户的更多信息请参见用户及权限。 父主题: 操作数据库
  • 操作步骤 创建表空间 执行如下命令创建用户jack。 1 gaussdb=# CREATE USER jack IDENTIFIED BY '********'; 当结果显示为如下信息,则表示创建成功。 1 CREATE ROLE 执行如下命令创建表空间。 1 gaussdb=# CREATE TABLESPACE fastspace RELATIVE LOCATION 'my_tablespace/tablespace1'; 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLESPACE 其中“fastspace”为新创建的表空间,“CN和DN数据目录/pg_location/my_tablespace/tablespace1”是用户拥有读写权限的空目录。 数据库系统管理员执行如下命令将“fastspace”表空间的访问权限授予数据用户jack。 1 gaussdb=# GRANT CREATE ON TABLESPACE fastspace TO jack; 当结果显示为如下信息,则表示授予成功。 1 GRANT
  • 背景信息 通过使用表空间,管理员可以控制一个数据库安装的磁盘布局。这样有以下优点: 如果初始化数据库所在的分区或者表空间已满,又不能逻辑上扩展更多空间,可以在不同的分区上创建和使用表空间,直到系统重新配置空间。 表空间允许管理员根据数据库对象的使用模式安排数据位置,从而提高性能。 一个频繁使用的索引可以存储在性能稳定且运算速度较快的磁盘上,比如一种固态设备。 一个存储归档的数据,很少使用的或者对性能要求不高的表可以存储在一个运算速度较慢的磁盘上。 管理员通过表空间可以设置占用的磁盘空间,用以在和其他数据共用分区的时候,防止表空间占用相同分区上的其他空间。 表空间可以控制数据库数据占用的磁盘空间。当表空间所在磁盘的使用率达到90%时,数据库将被设置为只读模式,当磁盘使用率降到90%以下时,数据库将恢复到读写模式。CM的磁盘自动检查功能默认是开启的,若未开启,请联系管理员开启。 表空间对应于一个文件系统目录,采用如下命令创建一个对应/pg_location/mount1/path1的表空间,并指定最大可使用空间为500GB。 1 2 --创建表空间。 gaussdb=# CREATE TABLESPACE ds_location1 LOCATION '/pg_location/mount1/path1' MAXSIZE '500G'; 通过MAXSIZE进行表空间配额管理对并发插入性能可能会有30%左右的影响,MAXSIZE指定每个DN的配额大小,每个DN实际的表空间容量和配额误差在500MB以内。请根据实际的情况确认是否需要设置表空间的最大值。 GaussDB自带了两个表空间:pg_default和pg_global。 默认表空间pg_default:用来存储非共享系统表、用户表、用户表index、临时表、临时表index、内部临时表的默认表空间。对应存储目录为实例数据目录下的base目录。 共享表空间pg_global:用来存储共享系统表的表空间。对应存储目录为实例数据目录下的global目录。
  • 注意事项 如果数据库的编码为SQL_ASCII(可以通过“show server_encoding;”命令查看当前数据库存储编码),则在创建数据库对象时,如果对象名中含有多字节字符(例如中文),超过数据库对象名长度限制(63字节)的时候,数据库将会将最后一个字节(而不是字符)截断,可能造成出现半个字符的情况。 针对这种情况,请遵循以下条件: 保证数据对象的名称不超过限定长度。 修改数据库的默认存储编码集(server_encoding)为utf-8编码集。 不要使用多字节字符做为对象名。 因为误操作导致在多字节字符的中间截断,从而导致无法删除数据库对象,如果出现这种现象,请使用截断前的数据库对象名进行删除操作,或将该对象从各个数据库节点的相应系统表中依次删除。
  • 背景信息 初始时,GaussDB包含两个模板数据库template0、template1以及一个默认的用户数据库postgres。postgres默认的兼容数据库类型为O(即DBCOMPATIBILITY = A ),该兼容类型下将空字符串作为NULL处理。 CREATE DATABASE实际上通过拷贝模板数据库来创建新数据库。默认情况下,拷贝template0。请避免使用客户端或其他方式连接及操作两个模板数据库。 模板数据库中没有用户表,可通过系统表PG_DATABASE查看模板数据库属性。 模板template0不允许用户连接,模板template1只允许数据库初始用户和系统管理员连接,普通用户无法连接。 数据库系统中会有多个数据库,但是客户端程序一次只能连接一个数据库。也不能在不同的数据库之间相互查询。GaussDB中存在多个数据库时,需要通过-d参数指定相应的数据库实例进行连接。
  • 查看数据库中包含的表 在public Schema下新建表格。 gaussdb=# CREATE TABLE public.search_table_t1(a int); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t2(b int); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t3(c int); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t4(d int); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t5(e int); CREATE TABLE 在PG_TABLES系统表中查看public Schema中包含的前缀为search_table的表。 1 gaussdb=# SELECT distinct(tablename) FROM pg_tables WHERE SCHEMANAME = 'public' AND TABLENAME LIKE 'search_table%'; 结果如下: 1 2 3 4 5 6 7 8 tablename ----------------- search_table_t1 search_table_t2 search_table_t3 search_table_t4 search_table_t5 (5 rows)
  • 查看和停止正在运行的查询语句 通过视图PG_STAT_ACTIVITY可以查看正在运行的查询语句。方法如下: 设置参数track_activities为on。 1 SET track_activities = on; 当此参数为on时,数据库系统才会获取当前活动查询的运行信息。 查看正在运行的查询语句。以查看正在运行的查询语句所连接的数据库名、执行查询的用户、查询状态及查询对应的PID为例。 1 SELECT datname, usename, state,pid FROM pg_stat_activity; 1 2 3 4 5 6 7 8 datname | usename | state | pid ----------+---------+--------+----------------- testdb | Ruby | active | 140298793514752 testdb | Ruby | active | 140298718004992 testdb | Ruby | idle | 140298650908416 testdb | Ruby | idle | 140298625742592 testdb | omm | active | 140298575406848 (5 rows) 如果state字段显示为idle,则表明此连接处于空闲,等待用户输入命令。 如果仅需要查看非空闲的查询语句,则使用如下命令查看: 1 SELECT datname, usename, state, pid FROM pg_stat_activity WHERE state != 'idle'; 若需要取消运行时间过长的查询,通过PG_TERMINATE_BACKEND函数,根据线程ID结束会话,请执行如下命令。 1 SELECT PG_TERMINATE_BACKEND(140298793514752); 显示如下信息,表示结束会话成功。 1 2 3 4 PG_TERMINATE_BACKEND ---------------------- t (1 row) 显示如下信息,表示用户执行了结束当前会话的操作。 1 2 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command gsql客户端使用PG_TERMINATE_BACKEND函数结束当前正在执行会话的后台线程时,如果当前的用户是初始用户,客户端不会退出而是自动重连,即返回“The connection to the server was lost. Attempting reset: Succeeded.”。否则客户端会重连失败,即返回“The connection to the server was lost. Attempting reset: Failed.”。这是因为只有初始用户可以免密登录,普通用户不能免密登录,从而重连失败。 对于使用PG_TERMINATE_BACKEND函数结束非活跃的后台线程时。如果打开了线程池,此时空闲的会话没有线程ID,无法结束会话。非线程池模式下,结束的会话不会自动重连。 1 2 3 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command The connection to the server was lost. Attempting reset: Succeeded.
  • 查看数据库用户 通过PG_USER可以查看数据库中所有用户的列表,还可以查看用户ID(USESYSID)和用户权限。 1 SELECT * FROM pg_user; usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valbegin | valuntil | respool | parent | spacelimit | useconfig | no degroup | tempspacelimit | spillspacelimit | usemonitoradmin | useoperatoradmin | usepolicyadmin ---------+----------+-------------+----------+-----------+---------+----------+----------+----------+--------------+--------+------------+-----------+--- --------+----------------+-----------------+-----------------+------------------+---------------- omm | 10 | t | t | t | t | ******** | | | default_pool | 0 | | | | | | t | t | t
  • 创建数据库用户 默认只有数据库安装时创建的管理员用户可以访问初始数据库,您还可以创建其他数据库用户账号。 1 gaussdb=# CREATE USER joe WITH PASSWORD "********"; 当结果显示为如下信息,则表示创建成功。 1 CREATE ROLE 如上创建了一个用户名为joe,密码为********的用户。 如下命令为设置joe用户为系统管理员。 gaussdb=# GRANT ALL PRIVILEGES TO joe; 使用GRANT命令进行相关权限设置,具体操作请参见GRANT。 关于数据库用户的更多信息请参见用户及权限。 父主题: 操作数据库
  • 操作步骤 创建表空间 执行如下命令创建用户jack。 1 gaussdb=# CREATE USER jack IDENTIFIED BY '********'; 当结果显示为如下信息,则表示创建成功。 1 CREATE ROLE 执行如下命令创建表空间。 1 gaussdb=# CREATE TABLESPACE fastspace RELATIVE LOCATION 'tablespace/tablespace_1'; 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLESPACE 其中“fastspace”为新创建的表空间,“数据库节点数据目录/pg_location/tablespace/tablespace_1”是用户拥有读写权限的空目录。 数据库系统管理员执行如下命令将“fastspace”表空间的访问权限授予数据用户jack。 1 gaussdb=# GRANT CREATE ON TABLESPACE fastspace TO jack; 当结果显示为如下信息,则表示授予成功。 1 GRANT
  • 背景信息 通过使用表空间,管理员可以控制一个数据库安装的磁盘布局。这样有以下优点: 如果初始化数据库所在的分区或者表空间已满,又不能逻辑上扩展更多空间,可以在不同的分区上创建和使用表空间,直到系统重新配置空间。 表空间允许管理员根据数据库对象的使用模式安排数据位置,从而提高性能。 一个频繁使用的索引可以存储在性能稳定且运算速度较快的磁盘上,比如一种固态设备。 一个存储归档的数据,很少使用的或者对性能要求不高的表可以存储在一个运算速度较慢的磁盘上。 管理员通过表空间可以设置占用的磁盘空间,用以在和其他数据共用分区的时候,防止表空间占用相同分区上的其他空间。 表空间可以控制数据库数据占用的磁盘空间。当表空间所在磁盘的使用率达到90%时,数据库将被设置为只读模式,当磁盘使用率降到90%以下时,数据库将恢复到读写模式。 建议用户使用数据库时,通过后台监控程序或者Database Manager进行磁盘空间使用率监控,以免出现数据库只读情况。 表空间对应于一个文件系统目录,比如数据库节点数据目录/pg_location/mount1/path1是用户拥有读写权限的空目录,那么可以在这个目录下创建一个绝对路径表空间。 使用表空间配额管理会使性能有30%左右的影响,MAXSIZE指定每个数据库节点的配额大小,误差范围在500MB以内。请根据实际的情况确认是否需要设置表空间的最大值。 GaussDB自带了两个表空间:pg_default和pg_global。 默认表空间pg_default:用来存储非共享系统表、用户表、用户表index、临时表、临时表index、内部临时表的默认表空间。对应存储目录为实例数据目录下的base目录。 共享表空间pg_global:用来存储共享系统表的表空间。对应存储目录为实例数据目录下的global目录。
  • 列存表 数据按列进行存储,即一列所有数据是连续存储的。单列查询IO小,比行存表占用更少的存储空间。适合数据批量插入、更新较少和以查询为主统计分析类的场景。列存表不适合点查询。 1 2 3 4 5 6 7 8 9 10 gaussdb=# CREATE TABLE customer_t2 ( state_ID CHAR(2), state_NAME VARCHAR2(40), area_ID NUMBER ) WITH (ORIENTATION = COLUMN); --删除表 gaussdb=# DROP TABLE customer_t2;