-
问题现象:集群出现很多dn报内存不可用问题,导致大批作业中断。ERROR: dn_6155_6156 memory is temporarily unavailableDETAIL: Failed on request of size 54720 bytes under queryid 43341056.定位过程:通过gsql登到其中一个报错的dn执行如下语句查看当前数据库节点使用内存的信息。SELECT * FROM pv_total_memory_detail;返回结果如下,发现dynamic_used_memory为64G,超过了max_process_memory 61G。 执行如下语句查看活动SQL情况。SELECT * FROM pg_stat_activity WHERE state=’active’;返回结果如下,没有发现活动的SQL。3.执行如下语句查看top10 占用内存SQL。SELECT sessid, sum_total, sum_free,sum_used, query_id, query_start, state, waiting, enqueue,query FROM (select sessid, sum(totalsize) as sum_total, sum(freesize) as sum_free, sum(usedsize) as sum_used from pv_session_memory_detail group by sessid order by sum_total desc limit 10 ) a , pg_stat_activity b WHERE split_part(a.sessid,'.',2) = b.pid;返回结果如下,pooler结束后发送的一条内部命令(由于集群参数enable_stateless_pooler_reuse设置为off,pooler连接无法重用,导致残留pooler连接较多),且都为idle态。4.通过执行如下语句查询内存使用情况。SELECT pg_size_pretty(sum(totalsize)) as sum_totalsize,pg_size_pretty(sum(usedsize)) as sum_usedsize FROM pv_session_memory_detail;返回结果如下,显示pv_session_memoey_detail中sum(totalsize)和sum(usedsize)仅为7g。由于该视图中对每个session最大只能保存256条记录,所以导致无法看到更多内存使用信息。5.通过执行如下语句,查看top使用内存session的memorycontext信息。SELECT sessid, contextname, level,parent, pg_size_pretty(totalsize) as totalsize,pg_size_pretty(freesize) as freesize,pg_size_pretty(usedsize) as usedsize, datname,query_id, query FROM pv_session_memory_detail a , pg_stat_activity b WHERE split_part(a.sessid,'.',2) = b.pid ORDER BY totalsize desc limit 20 ;返回信息如下,显示TopMemoryContext占用了6G多的内存,但之前sql已经执行结束,很大可能性存在内存泄漏。6.通过在cn上执行direct on到所有dn执行terminate杀idle的线程,所有dn仍报内存临时不可用错误。只能通过gs_ssh连接所有dn执行pg_terminate_backend(pid)终止idle状态的线程,执行成功后,确认dn内存释放了30g。再次让应用侧重提作业,作业运行正常。gs_ssh -c "gsql -d bdsp -p 25330 -c \"select pg_terminate_backend(pid) from pg_stat_activity where state='idle';\"; gsql -d bdsp -p 25332 -c \"select pg_terminate_backend(pid) from pg_stat_activity where state='idle';\"; gsql -d bdsp -p 25334 -c \"select pg_terminate_backend(pid) from pg_stat_activity where state='idle';\"; gsql -d bdsp -p 25336 -c \"select pg_terminate_backend(pid) from pg_stat_activity where state='idle';\"; gsql -d bdsp -p 25338 -c \"select pg_terminate_backend(pid) from pg_stat_activity where state='idle';\";" > gs_ssh_1.log
-
首先我的python环境的 python3使用的软件是 PyCharm (社区版可以免费使用) 1.连接前的准备 连接SQL server数据库需要导入 pymssql这个模块,如果你不知道你有没有安装这个模块你可以 win+r键 输入cmd然后输入 pip list后回车 查看这时候如果你发现没有 pymssql的话 那么你需要安装这个模块 在PyCharm里面创建一个项目后新建一个 python文件 然后再第一行输入 import pymssql 这时候就会提示没有这个模块 点击鼠标放在报错的那条线上之后 选择 安装包pymssql然后安装 等待安装完就行了。如果你没有pycharm这个软件的话你也可以win+r输入cmd 打开cmd后输入pip install pymssql后回车等待一会安装成功就行了如果没有安装成功你可能需要配置一下你的 pip.ini文件 关于配置 pip.ini文件 这里就不多讲了以后在讲2.开始导入好模块后 首先我们连接SqlServer数据库 连接前你必须现有SQL server数据库import pymssqldef conn(): connect = pymssql.connect('(local)', 'sa', 'sa', 'MySql') /创建连接对象(local是本地数据库地址,后面的第一个sa是连接SQL server数据库账户第二个是密码 后面的"是你要连接的某个数据库的名字") 反正我是这么认为的 if connect: print("连接成功!") 如果连接成功就打印 连接成功 return connectif __name__ == '__main__': conn = conn() cursor = conn.cursor() sql = "select * from My" //查询语句 cursor.execute(sql) row = cursor.fetchone() while row: print("ID=%s, Pwd=%s" % (row[0], row[1])) 从数据库里读取后输出的结果 row = cursor.fetchone() cursor.close() conn.close() MySql的连接方法下一篇文章在讲吧 顺便把配置pip的方法也讲了 如果有好的建议可以提出
-
从一个以上的表中选取数据也是可以做到的。下面的例子会创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:SELECT Persons.LastName,Orders.OrderNoINTO Persons_Order_BackupFROM PersonsINNER JOIN Orders ON Persons.Id_P=Orders.Id_P
-
SELECT INTO 语句SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。SQL SELECT INTO 语法您可以把所有的列插入新表:SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename或者只把希望的列插入新表:SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablenameSQL SELECT INTO 实例 - 制作备份复件下面的例子会制作 "Persons" 表的备份复件:SELECT *INTO Persons_backup FROM PersonsIN 子句可用于向另一个数据库中拷贝表:SELECT *INTO Persons IN 'Backup.mdb' FROM Persons如果我们希望拷贝某些域,可以在 SELECT 语句后列出这些域:SELECT LastName,FirstNameINTO Persons_backup FROM PersonsSQL SELECT INTO 实例 - 带有 WHERE 子句我们也可以添加 WHERE 子句。下面的例子通过从 "Persons" 表中提取居住在 "Beijing" 的人的信息,创建了一个带有两个列的名为 "Persons_backup" 的表:SELECT LastName,FirstnameINTO Persons_backup FROM PersonsWHERE City='Beijing'
-
FORMAT() 函数FORMAT 函数用于对字段的显示进行格式化。SQL FORMAT() 语法SELECT FORMAT(column_name,format) FROM table_name参数描述column_name必需。要格式化的字段。format必需。规定格式。SQL FORMAT() 实例我们拥有下面这个 "Products" 表:Prod_IdProductNameUnitUnitPrice1gold1000 g32.352silver1000 g11.563copper1000 g6.85现在,我们希望显示每天日期所对应的名称和价格(日期的显示格式是 "YYYY-MM-DD")。我们使用如下 SQL 语句:SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate FROM Products结果集类似这样:ProductNameUnitPricePerDategold32.3512/29/2008silver11.5612/29/2008copper6.8512/29/2008
-
【功能模块】项目去O,执行sql批量插入、更新遇到传参问题。【操作步骤&问题现象】项目数据库环境由oracle更换成gauss200后,#{item.userAccount,jdbcType=VARCHAR}传值报错,更改为'${item.userAccount}'验证通过,而$这种CI门禁是不合规,有sql注入风险,特此请教下有什么更好的方式替代。备注:#{item.userAccount}、‘#{item.userAccount}’、'#{item.userAccount,jdbcType=VARCHAR}' 3种方式均不通不过。【截图信息】代码:<insert id="saveUserColCfg" parameterType="java.util.List"> begin <foreach collection="list" item="item" index="index"> UPDATE dmsalesw.DM_SALE_MCR_COL_USER_CFG A set A.SEQ_INDEX =#{item.seqIndex,jdbcType=NUMERIC}, A.DISPLAY =#{item.disPlay,jdbcType=NUMERIC}, A.LAST_UPDATE =SYSDATE FROM (select #{item.userAccount,jdbcType=VARCHAR} as USERACCOUNT, #{item.showName,jdbcType=VARCHAR} as SHOWNAME, #{item.reportType,jdbcType=VARCHAR} as REPORT_TYPE from dual) S WHERE (A.SHOWNAME = S.SHOWNAME AND A.USERACCOUNT = S.USERACCOUNT AND A.REPORT_TYPE = S.REPORT_TYPE); INSERT INTO dmsalesw.DM_SALE_MCR_COL_USER_CFG (USERACCOUNT, REPORT_TYPE, SEQ_INDEX, SHOWNAME, DISPLAY, TDCONTEXT, THCONTEXT, FIXED_COL, LAST_UPDATE) SELECT A.USERACCOUNT, A.REPORT_TYPE, A.SEQ_INDEX, A.SHOWNAME, A.DISPLAY, A.TDCONTEXT, A.THCONTEXT, A.FIXED_COL, A.LAST_UPDATE FROM ( SELECT #{item.userAccount,jdbcType=VARCHAR} AS USERACCOUNT, #{item.reportType,jdbcType=VARCHAR} AS REPORT_TYPE, #{item.seqIndex,jdbcType=NUMERIC} AS SEQ_INDEX, #{item.showName,jdbcType=VARCHAR} AS SHOWNAME, #{item.disPlay,jdbcType=NUMERIC} AS DISPLAY, #{item.tdContext,jdbcType=VARCHAR} AS TDCONTEXT, #{item.thContext,jdbcType=VARCHAR} AS THCONTEXT, #{item.fixedCol,jdbcType=NUMERIC} AS FIXED_COL, SYSDATE AS LAST_UPDATE FROM DUAL )A LEFT OUTER JOIN dmsalesw.DM_SALE_MCR_COL_USER_CFG S ON A.SHOWNAME = S.SHOWNAME AND A.USERACCOUNT = S.USERACCOUNT AND A.REPORT_TYPE = S.REPORT_TYPE WHERE S.SHOWNAME IS NULL AND S.USERACCOUNT IS NULL AND S.REPORT_TYPE IS NULL; </foreach> end; </insert>备注:如果是使用'${item.userAccount}'这种方式则执行成功不报错($这种CI门禁是不合规,有sql注入风险),代码如下图:<insert id="saveUserColCfg" parameterType="java.util.List"> begin <foreach collection="list" item="item" index="index"> UPDATE dmsalesw.DM_SALE_MCR_COL_USER_CFG A set A.SEQ_INDEX =${item.seqIndex}, A.DISPLAY =${item.disPlay}, A.LAST_UPDATE =SYSDATE FROM (select '${item.userAccount}' as USERACCOUNT,'${item.showName}' as SHOWNAME, '${item.reportType}' as REPORT_TYPE from dual) S WHERE (A.SHOWNAME = S.SHOWNAME AND A.USERACCOUNT = S.USERACCOUNT AND A.REPORT_TYPE = S.REPORT_TYPE); INSERT INTO dmsalesw.DM_SALE_MCR_COL_USER_CFG (USERACCOUNT, REPORT_TYPE, SEQ_INDEX, SHOWNAME, DISPLAY, TDCONTEXT, THCONTEXT, FIXED_COL, LAST_UPDATE) SELECT A.USERACCOUNT, A.REPORT_TYPE, A.SEQ_INDEX, A.SHOWNAME, A.DISPLAY, A.TDCONTEXT, A.THCONTEXT, A.FIXED_COL, A.LAST_UPDATE FROM ( SELECT '${item.userAccount}' AS USERACCOUNT, '${item.reportType}' AS REPORT_TYPE, ${item.seqIndex} AS SEQ_INDEX, '${item.showName}' AS SHOWNAME, ${item.disPlay} AS DISPLAY, '${item.tdContext}' AS TDCONTEXT, '${item.thContext}' AS THCONTEXT, ${item.fixedCol} AS FIXED_COL, SYSDATE AS LAST_UPDATE FROM DUAL )A LEFT OUTER JOIN dmsalesw.DM_SALE_MCR_COL_USER_CFG S ON A.SHOWNAME = S.SHOWNAME AND A.USERACCOUNT = S.USERACCOUNT AND A.REPORT_TYPE = S.REPORT_TYPE WHERE S.SHOWNAME IS NULL AND S.USERACCOUNT IS NULL AND S.REPORT_TYPE IS NULL; </foreach> end; </insert>【日志信息】(可选,上传日志内容或者附件)附件为报错的日志内容
-
摘要HyperLogLog(hll)是一个用于计算集合中不重复的元素个数问题的算法,精确的计算需要与基数成比例的内存量,这对于非常大的数据集是不实际的。概率基数估算(如HyperLogLog算法)使用的内存要比这少得多,但代价是仅获得一个基数的近似值。背景在现实生活中,我们通常需要统计一个集合中不重复的元素个数。在数据库中通过使用如下的SQL语句进行精确统计:CREATE TABLE tbl(id INT, a INT); INSERT INTO tbl VALUES(1, 1), (2, 1), (3, 2), (4, 2), (5, 2), (6, 3); SELECT COUNT(DISTINCT a) FROM tbl; count ------- 3 (1 row)为了计算 count-distinct 通常使用哈希或者排序的方式计算不重复元素个数。但是,如果数据量比较大,哈希或者排序消耗的内存较大。HyperLogLog 是处理这个问题的一个概率算法,但是其消耗资源较少。postgresql-hll插件引入了一个新的数据类型hll,它是一个HyperLogLog数据结构。下面对其使用进行详细介绍。支持版本PostgreSQL 12PostgreSQL 11PostgreSQL 10PostgreSQL 9.6PostgreSQL 9.5安装在华为云使用postgresql-hll,请参考:https://support.huaweicloud.com/usermanual-rds/rds_09_0043.html 进行安装和卸载。使用CREATE TABLE hll_tbl ( id integer, set hll ); --- 插入空的HLL INSERT INTO hll_tbl(id, set) VALUES (1, hll_empty()); --- 增加一个被散列的整数值到HLL中 UPDATE hll_tbl SET set = hll_add(set, hll_hash_integer(12345)) WHERE id = 1; --- 增加一个被散列的字符串到HLL中 UPDATE hll_tbl SET set = hll_add(set, hll_hash_text('hello world')) WHERE id = 1; --- 计算HLL的基数 SELECT hll_cardinality(set) FROM hll_tbl WHERE id = 1;数据仓库示例我们假设有一个事实表,记录了用户对我的站点的访问、他们做了什么以及他们来自哪里。表中有上亿行数据,表扫描需要几分钟(或者至少需要很多秒)。CREATE TABLE facts ( date date, user_id integer, activity_type smallint, referrer varchar(255) ); insert into facts select timestamp '2014-01-10 10:00:00' + random() * (timestamp '2021-01-20 20:00:00' - timestamp '2014-01-10 10:00:00'), generate_series(1, 10000000), 1, 'no use'; insert into facts select timestamp '2014-01-10 10:00:00' + random() * (timestamp '2021-01-20 20:00:00' - timestamp '2014-01-10 10:00:00'), generate_series(1, 10000000), 1, 'no use';如果想快速(毫秒级别)知道每天有多少独立用户访问了站点,可以建立一个聚合表:CREATE TABLE daily_uniques ( date date UNIQUE, users hll ); INSERT INTO daily_uniques(date, users) SELECT date, hll_add_agg(hll_hash_integer(user_id)) FROM facts GROUP BY 1;我们首先对user_id进行散列,然后按天将这些散列后的值聚合为一个hll。现在我们可以计算每天的hll基数:SELECT date, hll_cardinality(users) FROM daily_uniques;如果想要得到这周独立的用户访问数呢?SELECT hll_cardinality(hll_union_agg(users)) FROM daily_uniques WHERE date >= '2012-01-02'::date AND date <= '2012-01-08'::date;操作符插件中已经添加了一些操作符,使用hll变得不那么冗长。它们是最常用函数的简单别名。散列函数hll_hash_boolean(boolean)hll_hash_smallint(smallint)hll_hash_integer(integer)hll_hash_bigint(bigint)hll_hash_bytea(bytea)hll_hash_text(text)hll_hash_any(any)示例如下:SELECT hll_hash_boolean(TRUE); SELECT hll_hash_boolean(TRUE, 123/*hash seed*/); SELECT hll_hash_smallint(4::smallint); SELECT hll_hash_smallint(4::smallint, 123/*hash seed*/); SELECT hll_hash_integer(21474836); SELECT hll_hash_integer(21474836, 123/*hash seed*/); SELECT hll_hash_bigint(223372036854775808); SELECT hll_hash_bigint(223372036854775808, 123/*hash seed*/); SELECT hll_hash_bytea(E'\\xDEADBEEF'); SELECT hll_hash_bytea(E'\\xDEADBEEF', 123/*hash seed*/); SELECT hll_hash_text('foobar'); SELECT hll_hash_text('foobar', 123/*hash seed*/); SELECT hll_hash_any(123); SELECT hll_hash_any(123, 123/*hash seed*/);注意:hll_hash_any会动态地分派给适当的特定类型的函数,这使得它比它包装的特定类型的函数要慢。只有在不知道输入类型时才使用它。聚集函数如果要从表或结果集中创建一个hll,请使用hll_add_agg。这里的命名并不是特别有创意:它是一个聚合函数,将值添加到空的hll中。SELECT date, hll_add_agg(hll_hash_integer(user_id)) FROM facts GROUP BY 1;上面的示例将为每个包含每天用户的日期提供一个hll。如果您想汇总已经存储到单个hll中的一个hll列表,请使用hll_union_agg。再次说明:它是一个聚合函数,将值合并到一个空的hll中。SELECT EXTRACT(MONTH FROM date), hll_cardinality(hll_union_agg(users)) FROM daily_uniques GROUP BY 1;窗口是hll功能的另一个主要例子。执行滑动窗口惟一计数通常涉及一些generate_series技巧,对于已经计算过的滑动窗口则非常简单。SELECT date, #hll_union_agg(users) OVER seven_days FROM daily_uniques WINDOW seven_days AS (ORDER BY date ASC ROWS 6 PRECEDING);
-
在写按时间段查询的sql语句的时候 一般我们会这么写查询条件:where date>='2010-01-01' and date<='2010-10-1'但是在实执行Sql时些语句会转换成这样: where date>='2010-01-01 0:00:00' and date<='2010-10-1:0:00:00',再看这个条件的话,也许就会有些明白,那就是'2010-10-1 0:00:00' 之后的数据例如('2010-10-1:08:25:00')查不到,也就是说2010-10-1的数据查不到。知道原因了可以修改查询条件为: where date>='2010-01-01' and date<='2010-10-1 23:59:59' 或 where date>='2010-01-01' and date<='2010-10-2'某个表某个字段是Datetime型 以"YYYY-MM-DD 00:00:00" 存放(1)、例如数据2009-01-22 21:22:222009-01-22 19:21:112009-01-22 23:10:22(2)、用 select * from TABLE where date between '2009-1-22' And '2009-1-22' ,想查日期为2009-1-22的记录,结果查不到 (3)、问题原因短日期类型默认Time为00:00:00,所以当使用between作限制条件时,就相当于between '2009-1-22 00:00:00' and '2009-1-22 00:00:00',因此就查不出数据。(4)、解决方法 --方案一:对数据库里面的字段进行日期格式转换 select * from tb where convert(varchar(10),riqi,120) = '2009-01-22' --方案二:给日期补全时分秒 select * from tb where riqi between '2009-01-22 00:00:00' and '2009-01-22 23:59:59' --结果 /**//* id riqi ---- ------------------------------------------------------ A 2009-01-22 21:22:22.000 B 2009-01-22 19:21:11.000 C 2009-01-22 23:10:22.000 (所影响的行数为 3 行) */
-
摘要 开工大吉!小编特意给大家整理了“GaussDB(DWS)性能调优“系列专题!该技术专题由华为云数仓内核专家、资深数仓解决方案工程师撰写,从业务实践经验出发,为开发者介绍数仓知识、性能调优黑科技及开发实践小技巧,带您进阶为数仓性能调优高手,文末有福利,华为云限量定制T恤等你来拿,活动即刻开始,快来mark学习吧~本系列文章分为三个部分:GaussDB(DWS)产品动态、GaussDB(DWS)性能调优系列专题、GaussDB(DWS)案例实践分享。各位读者朋友们可以通过本文了解数仓的基本原理、学习数仓调优黑科技,然后结合案例实践技巧进行深入的开发技能学习。part1: 数仓GaussDB(DWS)产品动态重定义数据仓库,释放数仓非凡价值!新一代华为云数仓GaussDB(DWS)已广泛应用于金融、政府、运营商、交通、物流、互联网等领域,服务于全球1000+客户,为各行业提供极具竞争力的数据仓库解决方案。⇔ 华为云GaussDB(DWS)数据仓库以2048大规模节点通过信通院评测认证⇔ 五大关键能力,华为云原生数据仓库GaussDB(DWS)深度技术解读⇔ 华为GaussDB(DWS)数据仓库,助力招行“人人用数,创新前行”⇔ 数智金融 使能创新,“2020华为数智金融论坛”在溪村成功举办⇔ 华为认证GaussDB OLAP数仓高级工程师 HCIP-GaussDB-OLAP V1.5(中文版)发布通知part2: 数仓GaussDB(DWS)性能调优-基础篇数仓GaussDB(DWS)性能调优基础篇介绍性能调优最基本的数仓命令analyze和explain,同时,基于数仓GaussDB(DWS)中产生的分布式计划多种多样的特点,补充对现有分布式计划种类及其性能优劣的详细介绍。⇔ GaussDB(DWS)性能调优基础篇一:万物之始analyze统计信息介绍analyze命令,依次解读什么是统计信息、为什么要收集统计信息、怎么收集统计信息以及什么时候应该收集统计信息。⇔ GaussDB(DWS)性能调优系列基础篇二:大道至简explain分布式计划详细解读explain展示的数仓执行计划,介绍如何通过执行计划了解数仓的执行过程、识别性能瓶颈,针对性调优。⇔ GaussDB(DWS)性能调优系列基础篇三:衍化至繁之分布式计划详解基于分布式数仓GaussDB(DWS)中产生的分布式计划多种多样的特点,补充对现有分布式计划种类及其性能优劣的详细介绍。数仓GaussDB(DWS)性能调优-实战篇从数据建模、表定义的设计,到数仓硬件、集群部署的选择,再到数仓系统级调优、数据表结构设计,以及单个SQL语句的编写及调优,都要考虑对性能的影响。系统级调优也好,语句级调优也罢,掌握这十八般武艺,你也能成为一个性能调优高手。⇔ GaussDB(DWS)性能调优系列实战篇一:十八般武艺之总体调优策略介绍数仓级别的性能调优思路和总体策略,包括系统级和语句级调优,本篇主要重点放在系统级调优。⇔ GaussDB(DWS)性能调优系列实战篇二:十八般武艺之坏味道SQL识别发现SQL中的坏味道(导致执行效率低下的SQL语句及其执行方式)是性能调优的前提,本文简要介绍如何通过自诊断视图识别和发现业务中存在的 “坏味道”SQL,以便针对性调优。⇔ GaussDB(DWS)性能调优系列实战篇三:十八般武艺之好味道表定义如何根据数仓特征和产品业务特征,设计合理的表定义,以达到性能提升的目的。⇔ GaussDB(DWS)性能调优系列实战篇四:十八般武艺之SQL改写通过SQL改写提升执行性能,同时改写方法也是数据应用开发过程应该遵循的好SQL的书写习惯。⇔ GaussDB(DWS)性能调优系列实战篇五:十八般武艺之路径干预路径干预方法介绍,路径生成是表关联方式确定的主要阶段,本文讨论几个影响路径生成的要素:cost_param、 scan方式、join方式、stream方式,并从原理上分析如何干预路径的生成。⇔ GaussDB(DWS)性能调优系列实战篇六:十八般武艺Plan hint运用计划干预方法介绍,执行计划数仓执行方式的外在展示,本文讨论如何通过plan hint提示优化器采用更高效的计划,可以使查询执行的性能获得大幅的提升,成为性能调优的一件有利的工具。part3: 数仓GaussDB(DWS)案例实践分享⇔ GaussBD(DWS)内存自适应控制技术介绍数仓GaussDB(DWS)引入了内存自适应控制的技术,在SQL语句复杂、处理数据量大的AP场景下,能够对运行的作业进行内存级的管控,避免高并发场景下内存不足产生的各种问题。⇔ 侵略如火,GaussDB(DWS)数仓高可用容灾利器之逻辑备份在大数据时代,数据的完整和可靠性成为一个数仓最核心的能力之一。如果企业、政府因为硬件故障导致数据丢失、误删,损失将是不可估量的。本文着重于讲解数仓GaussDB(DWS)推出的一款主力的备份恢复工具——Roach逻辑备份的实现原理。⇔ PB级数仓GaussDB(DWS)性能黑科技之并行计算技术解密GaussDB(DWS)开发了并行计算技术,在语句执行时可以充分利用硬件资源进行并行加速,提高执行的吞吐率。本文将详细介绍GaussDB(DWS)并行计算技术的原理,以及其在performance信息中的展示,帮助各位开发者朋友更好地分析并行的性能。等等,DWS还给大家准备了开工大奖↓↓↓现在只需关注GaussDB(DWS)公众号并分享本文至朋友圈即有机会抽取华为云限量定制T恤!本次活动共5个获奖名额!活动时间:即日始至2021年2月28日23:59(中奖信息将在结束后5个工作日内公示)PS:小伙伴记得将朋友圈分享截图反馈到公众号后台参与抽奖哦~快快转发参与起来,get开工好礼吧!!!备注:添加微信小助手”GaussDBDWS”加入GaussDB(DWS)大神学习分享群:(最新的学习资源、活动信息,小助手会跟您一起分享哦)扫码关注我哦,我在这里↓↓↓*本活动最终解释权归华为云数仓GaussDB(DWS)所有。【了解更多】数仓GaussDB(DWS)开发者论坛:https://bbs.huaweicloud.com/forum/forum-598-1.html数仓GaussDB(DWS)产品主页:https://www.huaweicloud.com/product/dws.html活动结束中奖信息公示:(请中奖用户添加小助手微信号”GaussDBDWS”,反馈您的信息)中奖名单公示恭喜*江川健一*12楼恭喜*十三姨*23楼恭喜*起风了*26楼恭喜*Ploseatience*39楼恭喜*南海*41楼*中奖信息均按照后台反馈截图编号,由线上抽奖助手随机抽取,感谢您的参与!
-
1、pgxc_stat_activity视图中xact_start和query_start两个开始时间的区别和联系?2、如果计算一个sql的执行时长,建议用哪个开始时间?3、一般在查询会话过程中建议以哪个开始时间作为判断依据?
-
对于 SQL 初学者,在写 SQL 语句时,只要遵守下面几个书写规则,就可以避免很多错误。这些规则都非常简单,下面我们来逐一介绍。SQL 语句要以分号;结尾在 RDBMS (关系型数据库)当中,SQL 语句是逐条执行的,一条 SQL 语句代表着数据库的一个操作。我们通常在句子的句尾加注标点表示这句话结束,中文句子以句号。结尾,英文以点号.结尾,而 SQL 语句则使用英文分号;结尾。SQL 语句不区分大小写SQL 不区分关键字的大小写。例如,不管写成 SELECT 还是 select,解释都是一样的。表名和列名也是如此。提示:关键字是数据库事先定义的,有特别意义的单词。虽然可以根据个人喜好选择大写还是小写(或大小写混杂),但为了理解起来更加容易,本教程使用以下规则来书写 SQL 语句。关键字大写数据库名、表名和列名等小写需要注意的是,插入到表中的数据是区分大小写的。例如,向数据库中插入单词 Computer、COMPUTER 或 computer,这三个是不一样的数据常数的书写方式是固定的SQL 语句常常需要直接书写字符串、日期或者数字。例如,书写向表中插入字符串、日期或者数字等数据的 SQL 语句。 在 SQL 语句中直接书写的字符串、日期或者数字等称为常数。常数的书写方式如下所示:SQL 语句中含有字符串的时候,需要像 'abc' 这样,使用英文单引号'将字符串括起来,用来标识这是一个字符串。SQL 语句中含有日期的时候,同样需要使用英文单引号将其括起来。日期的格式有很多种('26 Jan 2020' 或者'20/01/26' 等),建议统一使用 '2020-12-28' 这种'年-月-日'的格式。在 SQL 语句中书写数字的时候,不需要使用任何符号标识,直接写成 1000 这样的数字即可。 注意:列名不是字符串,不能使用单引号。在MySQL 中可以用倒引号`把表名和列名括起来。单词需要用半角空格或者换行来分隔SQL 语句的单词之间必须使用半角空格(英文空格)或换行符来进行分隔。没有分隔的语句会发生错误,无法正常执行。下面是分隔和未分隔的 SQL 语句:CREATE TABLE Product(正确)CREATETABLE Product(错误)CREATE TABLEProduct(错误)不能使用全角空格(中文空格)作为单词的分隔符,否则会发生错误,出现无法预期的结果。SQL 语句中的标点符号必须都是英文状态下的,即半角字。
-
SQL 语句的大小写规则与语句组成元素、引用内容和服务器所使用的操作系统有关。1) SQL 关键字和函数名SQL 的关键字和函数名不区分大小写。例如,下面这些语句都是等价的:SELECT NOW();select now();sElEcT nOw();2) 数据库名、表名和视图名MySQL 用服务器主机的底层文件系统所包含的目录和文件来表示数据库和表。因此,数据库名和表名的默认大小写取决于服务器主机的操作系统在命名方面的规定。比如 Windows 系统的文件名不区分大小写,所以运行在 Windows 系统上面的 MySQL 服务器也不用区分数据库名和表名的大小写。Linux 系统的文件名区分大小写,所以运行在 Linux 系统上的 MySQL 服务器需要区分数据库名和表名的大小写。对于 Mac OS X 平台,其文件系统中的名字是个例外,它们不区分大小写。MySQL 会使用一个文件来表示一个视图,所以以上与表有关的也同样适用于视图。3) 存储程序的名字存储函数、存储过程和事件的名字都不区分大小写。触发器的名字要区分大小写,这一点与标准 SQL 的行为有所不同。4) 列名和索引名在 MySQL 里,列名和索引名都不区分大小写。例如,下面这些语句都是等价的:SELECT name FROM student ;SELECT NAME FROM student ;SELECT nAmE FROM student ;5) 别名的名字默认情况下,表的别名要区分大小写。SQL 语句中可以使用任意的大小写(大写、小写或大小写混用)来指定一个别名。如果需要在同一条语句里多次用到同一个别名,则必须让它们的大小写保持一致。 下表总结了 SQL 元素在 Windows 和 Linux 系统是否区分大小写。 WindowsLinux数据库名否(忽略大小写)是表名是表别名是列名否(忽略大小写)列别名否(忽略大小写)变量名是在 Linux 服务器下创建数据库和表时,应该认真考虑大小写的问题,比如它们以后是否会迁移到 Windows 服务器上。假设你在 Linux 服务器上创建了 abc 和 ABC 两个表,当把这两个表迁移到 Windows 服务器上时,就会出现问题;因为 Windows 系统并不区分大小写,abc 和 ABC 无差别。如果把表从 Linux 服务器迁移到 Windows 服务器时,也同样会遇到问题。想要避免大小写问题,可以先选定一种大小写方案,然后一直按照该方案去创建数据库和表。在阿里巴巴 Java 开发手册的 MySql 建表规约里提到:【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。通俗的说就是,MySQL 在 Windows 系统下不区分大小写,但在 Linux 系统下默认区分大小写。因此,数据库名、表名和字段名,都不允许出现任何大写字母,避免节外生枝。 一般建议统一使用小写字母,并且 InnoDB 引擎在其内部都是以小写字母方式来存储数据库名和表名的。这样可以有效的防止 MySQL 产生大小写问题。
-
Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号;select a.S# from (select s#,score from SC where C#='001') a,(select s#,score from SC where C#='002') b where a.score>b.score and a.s#=b.s#;2、查询平均成绩大于60分的同学的学号和平均成绩;select S#,avg(score) from sc group by S# having avg(score) >60;3、查询所有同学的学号、姓名、选课数、总成绩;select Student.S#,Student.Sname,count(SC.C#),sum(score) from Student left Outer join SC on Student.S#=SC.S# group by Student.S#,Sname4、查询姓“李”的老师的个数;select count(distinct(Tname)) from Teacher where Tname like '李%';5、查询没学过“叶平”老师课的同学的学号、姓名;select Student.S#,Student.Sname from Student where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名; select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001' and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');7、查询学过“叶平”老师所教的所有课的同学的学号、姓名; select S#,Sname from Student where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平'));8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名; Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2 from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;9、查询所有课程成绩小于60分的同学的学号、姓名; select S#,Sname from Student where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);10、查询没有学全所有课的同学的学号、姓名; select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名; select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名; select distinct SC.S#,Sname from Student,SC where Student.S#=SC.S# and C# in (select C# from SC where S#='001');
-
在日常生活中,我们可能没有察觉到经常使用的数据库系统。正式学习数据库之前,先带大家了解一下身边常见的数据库系统应用。在阅读以下内容时,读者可以先将:数据库看作一组相关的数据数据库管理系统(DBMS)看作管理和控制这组数据的软件数据库系统包括与数据库相互作用的应用程序、DBMS 和数据库在内的所有东西下面是生活中一些常见的数据库应用。超市购物我们在超市购买商品时,就是在访问一个数据库。结账时,收银员使用条形码阅读器扫描客户购买的每一件商品。这个条形码阅读器连接着一个访问商品数据库的应用程序,该程序根据条形码从商品数据库中找出商品价格,然后从库存中减去本次销售这种商品的数量,并且在屏幕上显示相应的价格。如果存货量低于设置的临界值,数据库系统将提示进货以补充存货。如果有客户向超市打电话订购商品,售货员可以通过运行应用程序,查看数据库中此商品是否有足够的存货。信用卡消费使用信用卡购买商品时,售货员要检查客户是否有足够的信用额度。该项检查可以通过打电话进行,也可以通过一个与计算机系统相连接的信用卡阅读器自动进行。无论哪种方式,一定在某个数据库中存有该客户使用信用卡购买商品的所有信息。为了检查客户的信用情况,需要有一个数据库应用程序,使用信用卡号码可以查询出这个月客户已购买商品的总价格,加上这次希望用信用卡购买的商品的价格,判断是否仍在信用额度之内。并且,如果用户确认购买,则此次购买商品的详细内容会被记录到该数据库中。应用程序还要访问数据库,在同意购买之前,检查信用卡不属被盗或丢失之列。此外,一般还有一些其它的应用程序负责每月向信用卡持卡人发送信用卡使用记录,并在收到付款之后向信用卡持卡人发送信息。旅行社预订假期行程当旅客向旅行社咨询假期行程安排时,旅行社将访问多个包含假日和航班详细信息的数据库。若客户预定行程,数据库系统必须进行所有必要的预定安排。在这种情况下,系统必须确保一个座位不被两个不同的旅行社预定,以及航班的预定座位不超过航班的固定座位。例如,假设从青海飞往北京的航班上仅剩最后一个座位,却有两个旅行社同时要求预定该座位,系统必须能够分辨和处理这种情况,即允许一个预定继续进行,通知另外一个旅行社已经没有剩余的座位。旅行社通常可能还有另外一个数据库用于开列票据。图书馆在图书馆中可能存在一个数据库,用来存储图书馆中所有图书的详细资料和读者的详细信息等。数据库系统还能提供预定服务,即允许读者预定图书,当该书可以借阅时,用邮件或其它方式通知读者。系统还可以向借书的读者发送提醒信息,告知其在规定的期限内尚未归还所借书。另外,现在所有的图书馆都配备了计算机索引系统,实现了图书的自动查询。使用该系统,可以让读者通过查询书名、作者或出版年份等信息,查找出希望借阅图书的所在位置,以及是否已经借出等信息。购买保险无论何时,如果想投保某个保险,比如寿险、家庭财产险或汽车保险,保险经纪人都要访问多个保险机构的数据库。数据库系统会根据所提供的客户个人详细信息,如姓名、家庭住址、年龄等情况,来确定保险的金额。保险经纪人可通过查阅多个数据库,找到一个能给客户最大实惠的保险。网上购物我们平时使用的购物网站都是通过数据库应用驱动的,例如,淘宝、京东、当当等。当当中有好多在线书店,它允许客户在不同的种类(例如计算机类或者管理类)中浏览和购买书籍。还可以按作者的姓名来浏览书籍。无论何种情形,该组织的网络服务器中都存在一个数据库,含有所有书籍的详细信息(书名、作者、价格、销售记录、出版社、简介和详细描述等),以及是否有存货、书籍运送情况、库存量和订购等信息。在数据库中书籍可被交叉引用。例如,一本书可能被列在多个种类下,比如同时列在计算机、程序语言、畅销书和推荐书籍名下。我们可以在线购买一本或多本书籍。当当网会通过数据库保存先前交易的记录(历史订单),包括购买的书名、送货地址和支付价格等详细信息,为网站的用户提供个性化服务。大学如果你正在大学就读,学校会有一个用来存储学生所有信息的数据库系统(学生管理系统),包括注册的课程、获得的各类奖学金、往年已选择的课程和今年正在选择的课程以及考试成绩信息等。可能还有一个数据库用来存储在大学中工作员工的详细信息。上述是生活中常见数据库的应用,你肯定还会遇见其它更多的数据库系统。虽然我们今天对这些应用司空见惯,但其实数据库系统是相当复杂的技术,到现在已经历经了六十多年的发展。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签