PostgreSQL 之慢 SQL 语句

一 导读 优化在硬件和非系统故障的情况下,对于提升数据库本身的性能非常重要。每一种类型的数据库都有自己不同的方式去跟踪优化数据库,这些方式中不仅仅包含了数据库系统本身参数层面的优化,而且也包括对 SQL 语句的优化。其中,对于 SQL 语句的优化是 DBA 经常需要接触的工作。因此需要经常关住慢 SQL 语句,以对其进行追踪优化。 二 数据库参数 PostgreSQL 中的慢 SQL 追踪是通过以记录日志的方式进行分析,追踪的,因此,需要优化 SQL 需要启动日志收集功能。以 RPM 方式安装的数据库日志收集功能默认是打开的,以源码编译的方式安装的数据库日志收集功能是关闭的。 启动日志收集功能 postgres=# show logging_collector ; logging_collector ------------------- off (1 row) postgres=# alter system set logging_collector = on; ALTER … [Read more...]

详解Oracle 21c 中的只读Oracle主⽬录特性 (ROOH)

1. 只读Oracle主⽬录特性(ROOH)介绍 当我们安装完成Oracle Database 21c 数据库软件后,发现ORACLE_BASE⽬录中出现了dbs和 homes⽬录,其实这是只读Oracle主⽬录特性(ROOH)特性所带来的变化。如下所示 只读Oracle主⽬录特性(ROOH)是在 Oracle Database 18c 中引⼊的,从 Oracle Database21c 开始,该特性是安装Oracle数据库软件后的唯⼀默认配置。在只读 Oracle 主⽬录配置模式下,数据库运⾏时所有需要写⼊的⽂件都会移出ORACLE_HOME,如:实例相关⽂件,⽹络配置⽂件,运⾏时⽣成的⽇志⽂件等。留在ORACLE_HOME ⽬录中的Oracle软件部分在运⾏时是只读的。简单来说,通过只读Oracle主⽬录的特性,可以将数据库运⾏⽂件和数据库配置⽂件分开,这样我们就可以很轻松的替换数据库运⾏⽂件了。⽐如使⽤“Golden … [Read more...]

PostgreSQL 常见时间日期处理

前言 在实际业务开发过程中,通常会遇到对时间日期相关的处理,这里列出一些常见的时间日期处理方法。 1. 时间戳带时区和不带时区 创建表字段时,指定带时区时间日期数据类型 postgres=# CREATE TABLE tab_test(id serial,app_name varchar,app_release_date timestamp with time zone default now()); CREATE TABLE postgres=# INSERT INTO tab_test VALUES(1,'app'); INSERT 0 1 postgres=# select * from tab_test; id | app_name | app_release_date ----+----------+------------------------------- 1 | app | 2021-10-11 15:24:05.730805+08 (1 row) 修改表字段为不带时区的数据类型 postgres=# alter table tab_test alter column app_release_date set data type timestamp without time zone; ALTER TABLE postgres=# alter table tab_test alter column app_release_date set default now(); ALTER TABLE postgres=# insert into tab_test values(2,'app2'); INSERT 0 1 postgres=# select * from tab_test; id | app_name | … [Read more...]

掌握TiUP工具 之 离线部署TiDB集群

TiDB数据库    传统的单机数据库在移动互联网、云计算、大数据和人工智能等场景下表现的力不从心,为了解决数据平台的扩展性的问题,TiDB 分布式数据库应运而生。TiDB 是当今开源 NewSQL 数据库领域的代表产品之一。TiDB采用分布式数据库架构,因此服务器数量比较多。在部署TiDB集群时,我们使用TiUP工具来安装整个TiDB集群环境。 从 TiDB 4.0 版本开始,TiUP 作为新的工具,承担着包管理器的角色,管理着 TiDB 生态下众多的组件,如 TiDB、PD、TiKV 等。用户想要运行 TiDB 生态中任何组件时,只需要执行 TiUP 一行命令即可,相比以前,极大地降低了管理难度。   默认情况下TiUP工具会联网进行工具包的下载和安装,但生产环境往往都是内网环境,无法连接外网进行下载。这种情况下,我们可以选择离线的部署方法。本文以 TiDB 5.0 … [Read more...]

掌握TiUP工具 之 启停TiDB集群节点

TiUP工具简介 从 TiDB 4.0 版本开始,TiUP 作为新的工具,承担着包管理器的角色,管理着 TiDB 生态下众多的组件,如 TiDB、PD、TiKV 等。用户想要运行 TiDB 生态中任何组件时,只需要执行 TiUP 一行命令即可,相比以前,极大地降低了管理难度。 使用TiUP工具可以很轻松的对TiDB集群进行日常运维工作,如果我们想启停TiDB集群中的某一台服务器,可以使用文章中的操作流程。 停止TiDB集群节点 首先使用 "tiup cluster display "命令查看TiDB集群信息,ID列显示的 IP:PORT 可以作为节点名称使用,执行过程如下: 接下来,可以参考停止集群命令 “tiup cluster stop -h"的帮忙信息,来得到停止某一台服务器的命令语法,从帮助中可以看到使用 -N 选项就是我们需要的功能,执行过程如下: 了解了命令后,接下来停止"192.168.2.81:2379"这台PD节点服务器,命令为:“tiup … [Read more...]

MySQL 有关用户密码

MySQL 介绍 MySQL 是由Oracle Corporation 开发和发行的最流行的数据库管理系统。MySQL 网站地址为: www.mysql.com,提供最新的MySQL软件包及相关工具的下载。MySQL 是一个数据库管理系统,数据库是由数据的集合构成。MySQL 是关系型数据库,关系型数据库存储数据在单独的一系列表中,而不是将数据存储在一个大的存储空间中。数据库的结构是被组织在快速的优化后的物理文件中。逻辑模型和对象如数据库、表、视图、行和列,提供了灵活的编程环境。MySQL 的 SQL 部分是标准的 "Structured Query Language"。SQL 是用来访问数据库的最标准的语言。当然,取决于你的编程环境。 安装 MySQL 使用 rpm 或者 yum 方式安装将会自动创建一个 mysql 普通操作系统用户。在当前 redhat 家族操作系统中,已经不再提供 mysql 安装包了,如果使用 yum … [Read more...]

记一次oracle HAIP引发的数据库问题

一、客户背景 前不久客户找到我跟我说他们新实施的两套oracle 12CRAC数据库补丁不能成功打上让我帮忙解决一下前往客户现场,客户系统为IBM AIX7.2,数据库为oracle12.2.0.1补丁是2021年4月份的补丁,采用了双心跳,客户已经将一节点GI补丁安装,二节点装不上,我尝试使用opatch auto二节点可以正常安装该补丁当时并没有注意集群的状态,第二天客户又找到我说集群状态不正常。 二、问题处理分析过程 1、登录数据库服务器查看集群状态发现只有一个节点ASM磁盘是在线状态 2、经过多次尝试关闭一边另一边ASM可以正常启动,只有一边能启动的情况两节点ASM实例无法同时启动,排查ASM日志发现ASM最后报错为 No connectivity to other instances in the cluster during startup. Hence, LMON is terminating the instance. Please check the LMON trace file for details. Also, please check the … [Read more...]

使用TIDB BR工具进行数据库备份

下载tidb工具包 注意下载的版本,我选择现装到tidb节点 [root@tidb ~]# wget https://download.pingcap.org/tidb-toolkit-v5.0.2-linux-amd64.tar.gz   创建备份目录 注意:请在执行备份命令的节点及所有KV节点创建备份目录,本地节点会存放备份产生的锁文件, tidb是多副本结构,所以每一个存放数据的kv节点都会产生备份。 [root@kv1 /]# mkdir /bakcup [root@kv1 /]# chmod 777 /bakcup/     全库备份 注意:PD节点IP和目录根据自己实际情况填写 [root@tidb bin]# ./br backup full --pd "10.0.0.201:2379" --storage "local:///backup" --ratelimit 120 --log-file backupfull.log   … [Read more...]

PostgreSQL中的GENERATED COLUMN

什么是 GENERATED COLUMN      GENERATE COLUMN 是一个在 CREATE TABLE 时指定的标识列(特征列)。该列将会附着一个隐藏的序列,并且在插入数据时以默认的隐藏序列为数据行进行插入。该列默认约束为 NOT NULL 约束。该列后有可选 GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] 关键字。如果使用 ALWAYS 关键字,当在使用 INSERT 语句时接受 OVERRIDING SYSTEM VALUES 语句。如果指定 BY DEFAULT ,则用户指定的值优先。 该特性是在 PostgreSQL V10 版本中推出,属于约束的一种,实际上是自动为列分配一个唯一的值。类似整形序列加非空约束,但是又可以以用户指定的方式进行数据插入。 语法     列名 数据类型 GENERATED {ALWAYS | BY DEFAULT } AS IDENTIFY [ (sequence_option) ] 语法解释: 数据类型: 通常是整型的一种[ int2 | int4 | int8 | smallint | int | bigint ] GENERATED … [Read more...]

PostgreSQL 对象管理

概述 PostgreSQL 中的所有数据都存储在对应的文件中,即我们常见到的文件。这些用来存储数据的文件共同构成了 PostgreSQL 整个数据库集簇,而数据库集簇是对 PostgreSQL 中多个数据库组成的集合的称呼。而在逻辑上,PostgreSQL 所有的数据库都是隶属于某个表空间,并且单个数据库不能跨表空间,而一个表空间中可以存放多个数据库。表空间和数据库的关系属于多对多的关系。那么数据库中的数据是如何存放在数据文件中的呢?接下来一起探究。 理解 oid 和 relfilenode 的关系 在 PostgreSQL 中,oid 全称为 Object identifier,称为对象标识符,在 PostgreSQL 中,用于为每个对象分配的一个内部主键数据类型,其别名为 regclass,并且 oid 可以转换为整数。而 relfilenode 则为 PostgreSQL 数据库中对对象的物理访问信息。relfilenode … [Read more...]