我理解你问的是硬件,一般思路: 1选平台:windows,linux还是unix 2挑主机:哪个厂商,什么样的性能要求(TPCC,TPCH),什么样的RAS要求,什么特殊要求如分区、虚拟化等 3搭架构:这个和你自身的应用以及选的数据库有关,比如oracle数据库,是单机单实例还是RAC或者其他方式 4配存储:I/O常常是数据库的瓶颈,要配合适的存储才能发挥服务器性能 当然理论设计还要看实际预算,暂时想到的,供你参考蓝屏
openstudio新版本跟老版本区别在于:今日,openGauss 300版本正式上线!
openGauss 300 版本是openGauss社区继200之后发布的又一个Release版本,版本维护生命周期为35年。300版本在高性能、高可用、高安全、高智能、工具链等方面都有持续创新和突破。300版本除了包含企业版外同时发布了openGauss社区首个轻量版(Lite 版)。
一、高性能
1 鲲鹏单机性能持续保持领先
单机鲲鹏64核2P TPCC满足150万tpmC之后,300版本持续性能优化,支持行存转向量化、外键锁优化等技术,同时单机鲲鹏32核2P TPCC达到100万tpmC。
2 In-place Update存储引擎
openGauss支持In-place Update存储引擎(原地更新),实现基于NUMA-Ware架构的高可扩展UNDO子系统、基于多版本的索引及闪回等关键技术,实现稳定场景下高性能。
3 并行逻辑解码
在使用JDBC或pg_recvlogical解码时,通过设置parallel-decode-num参数来开启并行解码特性,数据库内核通过一个读取线程、多个解码线程以及一个发送线程之间的流水线协同运行进行逻辑解码 *** 作,解码速度显著提升。
二、高可用
1 CM(Cluster Manager)
实现企业级集群管理能力,支持自定义资源监控,提供了数据库主备的状态监控、网络通信故障监控、文件系统故障监控、故障自动主备切换等能力。
2 Paxos分布式一致性协议
实现基于Paxos分布式一致性协议的日志复制及选主框架,支持在线添加、删除节点,在线转让Leader能力,通过自仲裁、多数派选主、优先级选主能力摆脱第三方仲裁组件,极大缩短RTO时间,且可预防任何故障下的脑裂双主。
3 Global SysCache
将系统缓存与会话解耦,绑定到线程上,结合线程池特性达到降低内存占用的目的,同时结合全局缓存,提升缓存命中率,保持性能稳定。
三、高安全
1 原生多方共识,账本数据库
融合区块链中的密码学校验技术,对用户指定的防篡改表中数据进行修改时,突破传统链式生成校验信息的串行化限制,高效生成、记录篡改校验信息,且内置高性能篡改校验接口供用户调用。
2 全密态数据库能力持续增强
密态等值查询能力扩展支持JDBC开发接口,并支持存储过程和函数中的密态等值查询能力,使得存储过程和函数中的数据也可以以密文形态参与运算。
3 支持国密算法体系
口令登录认证支持使用SM3国密算法,加解密函数API接口支持使用SM4国密算法,密态等值查询支持使用SM4加密算法存储数据并运算。
4 支持ANY权限管理
新增支持数据库级别的ANY权限管理,即对数据库内的某一类对象的所有实体具有特定的 *** 作权限,新增语法GRANT/REVOKE ANY权限TO/FROM user 来执行ANY权限授予和回收,同时新增系统表gs_db_privilege来记录用户的数据库级ANY权限。
四、高智能
1 AI4DB自治运维平台DBMind
实现DBMind系统组件化,支持通过组件命令执行方式,实现AI自治功能的调用;
集成基于openGauss exporter的采集能力,实现监控、采集、诊断和优化端到端能力。慢SQL根因分析实现基于KNN算法和根因特征权重矩阵的慢SQL根因分析召回,覆盖20+慢SQL场景;
支持分区表索引推荐能力;
实现轻量化趋势预测能力,实现线性时序、非线性时间和周期时序多种场景下的预测能力。
这要取决于你的具体应用和具体硬件2方面,下面案例公式供你参考:
参考案例:某项目计算实例
为了方便计算数据库服务器的造型,我们约定:
" 系统同时在线用户数为1500人(U1);
" 平均每个用户每分钟发出2次业务请求(N1);
" 系统发出的业务请求中,更新、查询、统计各占1/3;
" 平均每次更新业务产生3个事务(T1);
" 平均每次查询业务产生8个事务(T2);
" 平均每次统计业务产生13个事务(T3);
" 一天内忙时的处理量为平均值的5倍;
" 经验系数为16;(实际工程经验)
" 考虑服务器保留30%的冗余;
服务器需要的处理能力为:
TPC-C=U1N1(T1+T2+T3)/33经验系数/冗余系数
则应用服务器的处理性能估算为:
TPC-C= 15002(3+8+13)/3516/07= 274,285 tpmC
另附某参考资料说:HP DL580 G7 4C32核226G 1TBDDR3 TPC-C=1807347Ktpmc。希望能帮到你,请点个采纳啊,谢谢
如下罗列了一些创建、增、删、改、查相关,请参考(涉及的具体语法及参数自行查阅官方文档):
--1CREATE USER
--创建用户jim,登录密码为xxxxxxxxx。
openGauss=# CREATE USER jim PASSWORD 'xxxxxxxxx';
--下面语句与上面的等价。
openGauss=# CREATE USER kim IDENTIFIED BY 'xxxxxxxxx';
--如果创建有“创建数据库”权限的用户,则需要加CREATEDB关键字。
openGauss=# CREATE USER dim CREATEDB PASSWORD 'xxxxxxxxx';
--将用户jim的登录密码由xxxxxxxxx修改为Abcd@123。
openGauss=# ALTER USER jim IDENTIFIED BY 'Abcd@123' REPLACE 'xxxxxxxxx';
--为用户jim追加CREATEROLE权限。
openGauss=# ALTER USER jim CREATEROLE;
--将enable_seqscan的值设置为on, 设置成功后,在下一会话中生效。
openGauss=# ALTER USER jim SET enable_seqscan TO on;
--重置jim的enable_seqscan参数。
openGauss=# ALTER USER jim RESET enable_seqscan;
--锁定jim帐户。
openGauss=# ALTER USER jim ACCOUNT LOCK;
--删除用户。
openGauss=# DROP USER kim CASCADE;
openGauss=# DROP USER jim CASCADE;
openGauss=# DROP USER dim CASCADE;
--2创建和管理数据库
--使用如下命令创建一个新的数据库db_tpcc。
openGauss=# CREATE DATABASE db_tpcc;
注:
•数据库名称遵循SQL标识符的一般规则。当前角色自动成为此新数据库的所有者。
•如果一个数据库系统用于承载相互独立的用户和项目,建议把它们放在不同的数据库里。
•如果项目或者用户是相互关联的,并且可以相互使用对方的资源,则应该把它们放在同一个数据库里,但可以规划在不同的模式中。模式只是一个纯粹的逻辑结构,某个模式的访问权限由权限系统模块控制。
•创建数据库时,若数据库名称长度超过63字节,server端会对数据库名称进行截断,保留前63个字节,因此建议数据库名称长度不要超过63个字节。
--查看数据库
•使用\l元命令查看数据库系统的数据库列表。
openGauss=# \l
•使用如下命令通过系统表pg_database查询数据库列表。
openGauss=# SELECT datname FROM pg_database;
--修改数据库
用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。
•使用以下命令为数据库设置默认的模式搜索路径。
openGauss=# ALTER DATABASE db_tpcc SET search_path TO pa_catalog,public;
--使用如下命令为数据库重新命名。
openGauss=# ALTER DATABASE db_tpcc RENAME TO human_tpcds;
--删除数据库
用户可以使用DROP DATABASE命令删除数据库。这个命令删除了数据库中的系统目录,并且删除了磁盘上带有数据的数据库目录。用户必须是数据库的owner或者系统管理员才能删除数据库。当有人连接数据库时,删除 *** 作会失败。删除数据库时请先连接到其他的数据库。
使用如下命令删除数据库:
openGauss=# DROP DATABASE human_tpcds;
--3CREATE TABLE
--表是建立在数据库中的,在不同的数据库中可以存放相同的表。甚至可以通过使用模式在同一个数据库中创建相同名称的表。创建表前请先规划存储模型。
openGauss=# CREATE TABLE customer_t1
(
c_customer_sk integer,
c_customer_id char(5),
c_first_name char(6),
c_last_name char(8)
);
当结果显示为如下信息,则表示创建成功。
CREATE TABLE
其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四字段名称的类型。
--4向表中插入数据
--向表中插入数据前,意味着表已创建成功。
向表customer_t1中插入一行:
数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。
openGauss=# INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', 'Grace');
如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同。
openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace');
如果用户不知道所有字段的数值,可以忽略其中的一些。没有数值的字段将被填充为字段的缺省值。例如:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, 'Grace');
openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello');
用户也可以对独立的字段或者整个行明确缺省值:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', DEFAULT);
openGauss=# INSERT INTO customer_t1 DEFAULT VALUES;
如果需要在表中插入多行,请使用以下命令:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES
(6885, 'maps', 'Joes'),
(4321, 'tpcds', 'Lily'),
(9527, 'world', 'James');
如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令可以提升效率。
如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1的备份表customer_t2,现在需要将表customer_t1中的数据插入到表customer_t2中,则可以执行如下命令。
openGauss=# CREATE TABLE customer_t2
(
c_customer_sk integer,
c_customer_id char(5),
c_first_name char(6),
c_last_name char(8)
);
openGauss=# INSERT INTO customer_t2 SELECT FROM customer_t1;
从指定表插入数据到当前表时,若指定表与当前表对应的字段数据类型之间不存在隐式转换,则这两种数据类型必须相同。
删除备份表
openGauss=# DROP TABLE customer_t2 CASCADE;
在删除表的时候,若当前需删除的表与其他表有依赖关系,需先删除关联的表,然后再删除当前表。
--5更新表中数据
修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行,所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。
使用UPDATE命令更新现有行,需要提供以下三种信息:
•表的名称和要更新的字段名
•字段的新值
•要更新哪些行
SQL通常不会为数据行提供唯一标识,因此无法直接声明需要更新哪一行。但是可以通过声明一个被更新的行必须满足的条件。只有在表里存在主键的时候,才可以通过主键指定一个独立的行。
建立表和插入数据的步骤请参考创建表和向表中插入数据。
需要将表customer_t1中c_customer_sk为9527的地域重新定义为9876:
openGauss=# UPDATE customer_t1 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527;
这里的表名称也可以使用模式名修饰,否则会从默认的模式路径找到这个表。SET后面紧跟字段和新的字段值。新的字段值不仅可以是常量,也可以是变量表达式。
比如,把所有c_customer_sk的值增加100:
openGauss=# UPDATE customer_t1 SET c_customer_sk = c_customer_sk + 100;
在这里省略了WHERE子句,表示表中的所有行都要被更新。如果出现了WHERE子句,那么只有匹配其条件的行才会被更新。
在SET子句中的等号是一个赋值,而在WHERE子句中的等号是比较。WHERE条件不一定是相等测试,许多其他的 *** 作符也可以使用。
用户可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值,比如:
openGauss=# UPDATE customer_t1 SET c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421;
批量更新或删除数据后,会在数据文件中产生大量的删除标记,查询过程中标记删除的数据也是需要扫描的。故多次批量更新/删除后,标记删除的数据量过大会严重影响查询的性能。建议在批量更新/删除业务会反复执行的场景下,定期执行VACUUM FULL以保持查询性能。
--6查看数据
使用系统表pg_tables查询数据库所有表的信息。
openGauss=# SELECT FROM pg_tables;
使用gsql的\d+命令查询表的属性。
openGauss=# \d+ customer_t1;
执行如下命令查询表customer_t1的数据量。
openGauss=# SELECT count() FROM customer_t1;
执行如下命令查询表customer_t1的所有数据。
openGauss=# SELECT FROM customer_t1;
执行如下命令只查询字段c_customer_sk的数据。
openGauss=# SELECT c_customer_sk FROM customer_t1;
执行如下命令过滤字段c_customer_sk的重复数据。
openGauss=# SELECT DISTINCT( c_customer_sk ) FROM customer_t1;
执行如下命令查询字段c_customer_sk为3869的所有数据。
openGauss=# SELECT FROM customer_t1 WHERE c_customer_sk = 3869;
执行如下命令按照字段c_customer_sk进行排序。
openGauss=# SELECT FROM customer_t1 ORDER BY c_customer_sk;
--7删除表中数据
在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。
SQL不能直接访问独立的行,只能通过声明被删除行匹配的条件进行。如果表中有一个主键,用户可以指定准确的行。用户可以删除匹配条件的一组行或者一次删除表中的所有行。
使用DELETE命令删除行,如果删除表customer_t1中所有c_customer_sk为3869的记录:
openGauss=# DELETE FROM customer_t1 WHERE c_customer_sk = 3869;
如果执行如下命令之一,会删除表中所有的行。
openGauss=# DELETE FROM customer_t1;
或
openGauss=# TRUNCATE TABLE customer_t1;
全表删除的场景下,建议使用truncate,不建议使用delete。
删除创建的表:
openGauss=# DROP TABLE customer_t1;
性能测试的一些(我们用的)方法 2
1观测, 观测, 观测
-eBPF/Systemtap
-中间件自身提供观测
-USE
2测试工具校准
关于观测:
第一,推荐两种观测工具,eBPF或Systemtap;
第二,我们自己也做中间件,我们中间件自身是提供了一些观测指标的,向大家介绍一下这种方法;
第三,有一种线程是对于资源消耗的观察手段,即USE;
l eBPF *** 作系统级的观测
eBPF此处引用我的同事洪斌在今年的PHPCON的演讲,他的演讲主题是《MySQL性能诊断与实践》,其中详细的介绍了一下这个工具能给大家带来什么好处,列举其中几个,如:
1 延迟分布,比如MySQL请求的延迟,VFS延迟,Ext4的延迟,块设备的延迟等;
2 MySQL的文件IO压力分析;
3 临时表的生命周;
4 短连接的分析;
举一个例子,下图是eBPF的一个脚本,可观察MySQL的延迟,它会给大家列出延迟的分布曲线:
左边这一类是延迟,从零到一,二到三,四到七,它是指数级增长,单位是微秒,可以看到的是 压力打在数据库上的平均延迟,大量的数据压力在128微妙到255微妙之间,这个数据库的整体延迟还是不错的。
这张材料引用自Breddan Gregg的项目BCC,是eBPF的实用脚本集,它能观测 *** 作系统的方方面面,来帮助大家做压力观测。
l 中间件自身提供观测
*** 作系统的观测已经很全了,为什么中间件本身也要提供一些观测点,我们自己的中间件DBLE,是一个开源项目,GitHub上可以搜到,在DBLE中我们提供了这样的一种观测方法,如下:
DBLE把一个压力下来分成了六个阶段:
- 开始梳理
- 完成解析
- 完成路由分配
- 从数据库回收结果
- 后置处理
- 反馈处理
每个阶段提供了时间分布,这样我们可知道压力到底在中间件的哪一个阶段变慢。
比如在这个数据下,中间件的性能其实不错,是因为从第三个点到第四个点之间是后端数据库的处理,它占了整个处理时间的70%以上,所以在这种情况下可以判断后端数据库已经慢了,而不是中间件产生了什么太大的问题,所以中间件本身应该提供观测。
在这个项目的文档中, 我们把画了中间件的压力处理流程,其实对于大部分的中间件都是这样的,这张图在DBLE开源的文档上都可以找到。安利一下我们自己的中间件DBLE,大家有兴趣的话可以去看一下,文档齐全,分析方法也很齐全。
中间件本身的观测与 *** 作系统的区别在于: 中间件提供的视角是站在压力处理的视角来提供的, *** 作系统视角是站在资源的视角来提供,这两个视角缺一不可。如果只知道 *** 作系统说IO压力大,但是并不知道是哪个环节造成的压力大,那诊断瓶颈的成本会比较高 这就是为什么中间件要补充一个视角。
l USE
对于资源来说,强烈推荐《性能之巅》这本书,它介绍的分析方法叫USE,就是使用率、饱和度、错误率这三个指标就足以评估一个资源,IO资源也好,网络资源也好,足以评估一个资源现在的使用状况。
举一个例子,为什么使用率和饱和度得分开,如果现在 *** 作系统告诉我们内存占用率是100%,内存能不能再申请出来一块?是可以的,因为内存的使用率100%,其中比如说有50%是分给buffer和cache, *** 作系统会自动回收,这种情况下内存的使用率是100%,但饱和度并没有达到饱和,我们可以继续使用内存,直到它的饱和度上升到100%为止,这个内存就再也申请不出来了。
所以这就是为什么这本书将使用率和饱和度一定要拆开的原因。强烈推荐!
我们在DBLE中间件内部也提供了类似这样的观察机制,有点像Linux的Load average 我们对于它的每一个线程的使用都提供了一分钟、五分钟或者是十五分钟这三种使用率的评估。通过使用率就可以观察到在并发压力下中间件的运行状况到底是死在了一根线程上,还是每根线程上承载的压力差不多。之前关于线程公平性的问题也可以通过这个指标来诊断。
2测试工具校准
测试工具校准,举个例子,BenchmarkSQL,是Java版的TPCC,不少银行都在用它检验一个数据库或者是检验一个中间件能不能正常表现,但是我们碰到了这样一个问题:在测试压力中, 测试脚本要删一个记录,如果删不掉我就一直的删,一直删,但是这个工具在RR的隔离级别下造成一个死循环。
这个死循环是这样的:
第一句话它把auto commit设成0;
第二句select就会开启一个事务;
第三句话在这个压力下跑过一段逻辑之后再select看看这行数据还在不在,如果在就去删掉它。如果隔离级别是RR的,在第二三句之间把这行数据删掉,那么此时还能看到这行数据对吧 但之后的delete回应没有影响数据行,所以BenchmarkSQL就会陷入上面的这条死循环,看到数据, 删除, 没删掉, 然后就一直会去删,但是一直能看到这行数据,所以就会陷入这个死循环。
换句话说BenchmarkSQL,在RR的隔离级别下就会造成这样一个死循环。 很难想象这个工具是在银行客户中被大量使用 有一天项目经理告诉我,友商的中间件好着啊,然后我们就必须要去研究这款中间件,为什么它没有问题,原因是设置了RR的隔离级别, 它实际下到数据库的压力是RC隔离级别,RC隔离级别错在第三步看不到这条数据,它就不会跑下面这个循环,所以人家的中间件的错误将测试工具的错误抵消了。我们呼吁在测试时保持科学的态度
在开始演讲之前姜老师的笔记本在这个环境下工作是好的,我说能不能换我的笔记本做这个演讲,我就把线插入我的笔记本然后两边都显示不出来了 这个时候姜老师最应该说的一句话是什么呢?在我的环境下它是好的啊,但他并没有说,这是一个很科学的态度。
关于性能测试,我们推荐两个方法:
第一个方法,性能测试一定要去观测,观测的目的是什么,看到瓶颈,看到瓶颈的目的是什么?解决掉它以获得一个完全可以重复的正确的性能测试值来获得正确的结论。
第二个方法,测试工具一定要校准,业界常用的测试工具有很多,不要相信一些小众的测试工具,每一种测试工具都一定要校准。校准的话可以用多种测试工具同时去跑,去校准,或者是去分析测试工具的压力类型,刚才的观测过程就足以分析一个测试工具实际下发到后端的压力到底是什么,足以看到它的压力类型是什么,分析它的压力模式是不是正确的,以做测试工具校准。
所以在我们的公司ISO流程里边有一个规定是半年用这个测试工具做一次校准,因为测试工具也在面临着升级,我们面临的测试工具很多,这是我想讨论的第二个部分。
以上就是关于数据库服务器怎么设计全部的内容,包括:数据库服务器怎么设计、openstudio新版本跟老版本区别、一般的PCserver的TPCC值是多少4C32核的。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)