云服务器内容精选

  • 删除时间漫游快照 在dds副本集的主节点,或者dds集群的mongos节点命令行中,切换至用户库。 use test //可以是任意用户库,不影响最终命令结果 执行如下命令,删除已有时间漫游快照。 db.runCommand({snapshot:1, op:"delete", name:"s1"}) //删除名为s1的时间漫游快照 db.runCommand({snapshot:1, op:"delete"}) //如果未指定name参数,默认删除名为stable的时间漫游快照 db.runCommand({snapshot:1, op:"delete", name:"*"}) //指定name参数为*,删除所有时间漫游快照
  • 创建时间漫游快照 在dds副本集的主节点,或者dds集群的mongos节点命令行中,切换至用户库。 use test //可以是任意用户库,不影响最终快照结果 执行如下命令,创建时间漫游快照。 db.runCommand({snapshot: 1, op: "create", name: "s1"}) //创建名为s1的时间漫游快照 db.runCommand({snapshot: 1, op: "create"}) //如果未指定name参数,那么默认使用stable作为快照名称
  • 使用须知 当前只有最新版本的4.2、4.4文档数据库实例支持该能力,如果您的实例版本较低,请参考文档《补丁升级》; 时间漫游快照为持久化快照,实例重启后依然保留; 对于同一实例您最多可以创建8个时间漫游快照,快照名称支持字符0~9、a~z、A~Z 和 _ ,例如:"Snapshot_2024_09_30_15_18"; 因为时间漫游快照是针对当前时刻所有用户库的数据快照,因此下发命令的数据库账户至少应该具备{role: "dbAdminAnyDatabase"}权限,创建数据库账户请参考文档《创建用户》; 时间漫游快照命令只能在主节点(集群中则为mongos节点)下发,同时会以oplog的形式同步到备节点,所以如果想要有效避免主备倒换可能发生的回滚,那么应该将writeConcern设置为majority来创建、删除时间漫游快照; 请确保在时间漫游快照生效期间,不要对相关集合进行元数据变更(包括删除、重命名集合,创建、删除索引等),对于元数据的操作会使得对应集合的快照失效,但其他集合的快照不受影响; 读取时间漫游快照过程中请勿删除对应快照; 创建时间漫游快照本身并不会占用额外的磁盘空间,但这个动作会使得快照相关的数据不参与存储引擎的compact,因此在创建时间漫游快照后如果有新的写入动作,请及时关注实例的磁盘占用情况。存储引擎相关说明请参考文档《DDS 4.2及其以上版本切RocksDB存储引擎相关问题Q&A》; 因为时间漫游快照的相关数据不参与存储引擎compact,因此如果创建较多时间漫游快照,那么会对实例的写入性能造成5~10%左右的影响; 在集群实例上使用时间漫游快照时,需关闭均衡器Balancer,管理均衡器请参考文档《如何管理均衡器Balancer》。
  • 查看时间漫游快照 在dds副本集的主节点,或者dds集群的mongos节点命令行中,切换至用户库。 use test //可以是任意用户库,不影响最终命令结果 执行如下命令,查看当前时间漫游快照。 db.runCommand({snapshot: 1, op: "list"}) // {snapshot: 1, op: "list"} // {snapshot: 1, op: "list"} 执行结果 { "snapshotList" : [ "s1", "stable" ], "ok" : 1, "operationTime" : Timestamp(1727683917, 1), "$clusterTime" : { "clusterTime" : Timestamp(1727683917, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }
  • 连接数据库 连接数据库的客户端工具包括DAS、gsql和应用程序接口(如ODBC和JDBC)。 通过华为云数据管理服务(Data Admin Service,简称DAS)这款可视化的专业数据库管理工具,可获得执行SQL、高级数据库管理、智能化运维等功能,做到易用、安全、智能的管理数据库。 GaussDB 默认开通DAS连接权限。推荐使用DAS连接实例。连接GaussDB的具体操作请参考《DAS用户指南》。 gsql是GaussDB自带的客户端工具。使用gsql连接数据库,可以交互式地输入、编辑、执行SQL语句。 用户可以使用标准的数据库应用程序接口(如ODBC和JDBC),开发基于GaussDB的应用程序。 主备版场景下:客户端工具通过连接主DN访问数据库。因此连接前,需获取主DN所在服务器的IP地址及端口号信息。正常业务使用禁止直接连接其他DN访问数据库。 应用程序接口 父主题: 数据库使用
  • 连接数据库 连接数据库的客户端工具包括DAS、gsql和应用程序接口(如ODBC和JDBC)。 通过华为云数据管理服务(Data Admin Service,简称DAS)这款可视化的专业数据库管理工具,可获得执行SQL、高级数据库管理、智能化运维等功能,做到易用、安全、智能的管理数据库。GaussDB默认开通DAS连接权限。推荐使用DAS连接实例。连接GaussDB的具体操作请参考《DAS用户指南》。 gsql是GaussDB自带的客户端工具。使用gsql连接数据库,可以交互式地输入、编辑、执行SQL语句。具体连接方式请参考通过gsql连接实例。 用户可以使用标准的数据库应用程序接口(如ODBC和JDBC),开发基于GaussDB的应用程序。 分布式场景下:客户端工具通过连接CN访问数据库。因此连接前,需获取CN所在服务器的IP地址及CN的端口号信息。客户端工具可以通过连接任何一个CN访问数据库。正常业务使用禁止直接连接DN访问数据库。 应用程序接口 父主题: 数据库使用
  • 处理方法 故障构造场景 使用客户端连接DWS数据库。 执行以下SQL语句。 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE t1(a int, b timestamp); CREATE TABLE CREATE TABLE t2(a int, b text); CREATE TABLE INSERT INTO t1 select 1, current_date; INSERT 0 1 INSERT INTO t2 select 1, current_date; INSERT 0 1 SELECT * FROM t1 UNION SELECT * FROM t2; ERROR: UNION types timestamp without time zone and text cannot be matched LINE 1: SELECT * FROM t1 UNION SELECT * FROM t2; ^ 解决办法 示例中,t1表和t2表在b列上类型不同,导致在UNION操作时出现类型不匹配的报错,应保证UNION各分支相同位置的输出列类型匹配。 t2表b列是text类型,插入的数据是current_date,在插入时发生了隐式类型转换,所以插入不报错;但是在查询时,不会自动进行隐式转换,因此会报错。 解决以上问题,需保证UNION各分支的输出列类型匹配,不满足要求时可以对输出列强制类型转化。 1 2 3 4 5 6 SELECT a,b::text FROM t1 UNION SELECT a,b FROM t2; a | b ---+--------------------- 1 | 2023-02-16 1 | 2023-02-16 00:00:00 (2 rows)
  • 扩展JSON语义: 表2 扩展JSON语义 关键字 作用 filter 在查询语句中json查询的关键字。 term 查询时判断某个document是否包含某个具体的值。 match 将被询值进行分词,进行全文检索。 range 查询指定某个字段在某个特定的范围。(范围查询子关键字:"eq"/"gte"/"gt"/"lte"/"lt") bool 必须和 "must"、"should"、"must not" 一起组合出复杂的查询。 must bool类型的子查询,封装"term"、"match"、"range" 查询。 should bool类型的子查询,封装"term"、"match"、"range" 查询。 must not bool类型的子查询,封装"term"、"match"、"range" 查询。 sort 支持全局索引列排序功能。
  • 如何查看GaussDB(DWS)表是行存还是列存? 表的存储方式由建表语句中的ORIENTATION参数控制,row表示行存,column表示列存。 8.1.2及之前版本,不指定ORIENTATION参数,默认为row行存。 8.1.3版本后,支持通过GUC参数default_orientation控制,即创建表时,如果不指定ORIENTATION参数时,则根据该GUC参数的值来创建对应类型的表。其中,row表示行存表,column表示列存表,column enabledelta表示创建开启delta表的列存表。该GUC可通过DWS控制台进行设置,如下图。 查看已创建的表是行存还是列存,可通过表定义函数PG_GET_TABLEDEF查询。 如下orientation=column表示为列存表。 目前暂不支持通过ALTER TABLE语句修改ORIENTATION参数,即行存表和列存表无法直接进行转换。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT * FROM PG_GET_TABLEDEF('customer_t1'); pg_get_tabledef ----------------------------------------------------------------------------------- SET search_path = tpchobs; + CREATE TABLE customer_t1 ( + c_customer_sk integer, + c_customer_id character(5), + c_first_name character(6), + c_last_name character(8) + ) + WITH (orientation=column, compression=middle, colversion=2.0, enable_delta=false)+ DISTRIBUTE BY HASH(c_last_name) + TO GROUP group_version1; (1 row) 父主题: 数据库使用
  • 连接数据库 文档数据库服务常用的连接方式如下表。 表1 连接方式 连接方式 IP地址 使用场景 说明 内网连接(推荐) 内网IP地址 系统默认提供内网IP地址。 当应用部署在弹性云服务器上,且该弹性云服务器与文档数据库实例处于同一区域、可用区、虚拟私有云子网内,建议单独使用内网IP通过弹性云服务器连接文档数据库实例。 文档数据库服务和弹性云服务器在不同的安全组默认不能访问,需要在文档数据库服务所属安全组添加一条“入”的访问规则。 文档数据库服务默认端口:8635,需要手动修改才能访问其它端口。 安全性高,可实现DDS的较好性能。 通过内网连接集群实例 通过内网连接副本集实例 通过内网连接单节点实例 公网连接 弹性公网IP 当应用部署在弹性云服务器上,且该弹性云服务器与文档数据库实例处于不同区域时,建议单独使用弹性公网IP通过弹性云服务器连接文档数据库实例。 当应用部署在其他云服务的系统上时,建议单独使用弹性公网IP通过弹性云服务器连接文档数据库实例。 降低安全性。 通过公网连接集群实例 通过公网连接副本集实例 通过公网连接单节点实例 应用程序连接 内网IP地址 通过各类应用程序连接数据库。 通过Java连接数据库 通过Python连接数据库 父主题: 数据库使用
  • 账户密码等级设置 文档数据库服务在控制台侧管理员密码的安全策略: 密码长度为8~32个字符。 密码必须为英文大小写字母、数字、特殊字符~!@#%^*-_=+?()$的组合。 文档数据库对在客户端新创的数据库用户,设置了密码安全策略: 密码长度为8~32个字符。 密码为英文大小写字母、数字、特殊字符~@#%-_!*+=^?的组合。 创建实例数据库以及设置密码时,安全起见,为用户提供了密码复杂度校验,如果不满足要求,请根据提示信息调整密码复杂度。
  • 账户说明 为了给文档数据库实例提供管理服务,您在创建数据库实例时,文档数据库服务会自动为实例创建根账户root(或admin)、监控账户monitor和备份账户backup,这些账户属于华为云实例管理平台,您不能操作或者使用。如果试图删掉、重命名、修改这些账户的密码和权限,会导致出错。 对于数据库管理员账户rwuser,以及您所创建的账户,允许修改账户的密码。 默认账户rwuser以及通过rwuser创建的账户,对系统库admin和config权限受限,无法进行正常操作。对自身创建的库表,具有充分的操作权限。 MongoDB的User一般是在某个固定的认证库下创建的。连接数据库时,需要通过参数--authenticationDatabase来明确指定对应的认证库。 DDS实例中,默认的rwuser用户的认证库,是admin。 账户密码连续5次输入错误,账户会被锁定10s。
  • 创建账户 选择admin数据库。 use admin 以user1账户为例,创建数据库账户。 db.createUser({user: "user1", pwd: "****", passwordDigestor:"server", roles:[{role: "root", db: "admin"}]}) “server”是指在服务端加密密码,为固定值,无需修改。 “****”是新密码,长度8~32位,且必须为英文大小写字母、数字以及特殊字符~@#%-_!*+=^?的组合。 “roles”限制了该账户所具有的权限。若指定一个空数组,表示该账户不具有任何权限。 查看创建结果。 显示如下信息,说明创建成功。 Successfully added user: { "user" : "user1", "passwordDigestor" : "server", "roles" : [ { "role" : "root", "db" : "admin" } ] }
  • 支持与限制的命令 用户在连接到社区版文档数据库后,需要关注以下支持以及限制的命令。 更多信息,请参见MongoDB官方文档。 如下表所示,“√”表示当前版本支持该命令,“×”表示当前版本不支持该命令。 表1 支持与限制的命令 命令类别 命令名称 3.4 4.0 4.2 备注 Aggregates Commands aggregate √ √ √ - count √ √ √ - distinct √ √ √ - group √ √ √ - mapReduce √ √ √ 在DDS实例关联参数模板中设置参数“security.javascriptEnabled”的值为“true”后,可以使用该命令。更多信息,请参见如何使用MapReduce命令。 Geospatial Commands geoNear √ √ √ - geoSearch √ √ √ - Query and Write Operation Commands find √ √ √ - insert √ √ √ - update √ √ √ - delete √ √ √ - findAndModify √ √ √ - getMore √ √ √ - getLastError √ √ √ - resetError √ √ √ - getPrevError √ √ √ - parallelCollectionScan √ √ √ - Query Plan Cache Commands planCacheListFilters √ √ √ - planCacheSetFilter √ √ √ - planCacheClearFilters √ √ √ - planCacheListQueryShapes √ √ √ - planCacheListPlans √ √ √ - planCacheClear √ √ √ - Authentication Commands logout √ √ √ - authenticate √ √ √ - copydbgetnonce √ √ √ - getnonce √ √ √ - authSchemaUpgrade x x x 系统内部命令。 User Management Commands createUser √ √ √ - updateUser √ √ √ - dropUser √ √ √ - dropAllUsersFromDatabase √ √ √ - grantRolesToUser √ √ √ - revokeRolesFromUser √ √ √ - usersInfo √ √ √ - Role Management Commands invalidateUserCache √ √ √ - createRole √ √ √ - updateRole √ √ √ - dropRole √ √ √ - dropAllRolesFromDatabase √ √ √ - grantPrivilegesToRole √ √ √ - revokePrivilegesFromRole √ √ √ - grantRolesToRole √ √ √ - revokeRolesFromRole √ √ √ - rolesInfo √ √ √ - Replication Commands replSetElect x x x 系统内部命令。 replSetUpdatePosition x x x 系统内部命令。 appendOplogNote x x x 系统内部命令。 replSetFreeze x x x 系统内部命令。 replSetGetStatus √ √ √ - replSetInitiate x x x 系统内部命令。 replSetMaintenance x x x 系统内部命令。 replSetReconfig x x x 系统内部命令。 replSetStepDown x x x 系统内部命令。 replSetSyncFrom x x x 系统内部命令。 replSetRequestVotes x x x 系统内部命令。 replSetDeclareElectionWinner x x x 系统内部命令。 resync x x x 系统内部命令。 applyOps x x x 系统内部命令。 isMaster √ √ √ - replSetGetConfig x x x 系统内部命令。 Sharding Commands flushRouterConfig √ √ √ 高危命令。 addShard x x x 越权操作。 addShardToZone √ √ √ - balancerStart √ √ √ - balancerStatus √ √ √ - balancerStop √ √ √ - removeShardFromZone √ √ √ - updateZoneKeyRange √ √ √ - cleanupOrphaned x x x 高危命令。 checkShardingIndex x x x 系统内部命令。 enableSharding √ √ √ - listShards x x x 系统内部命令。 removeShard x x x 高危命令。 getShardMap x x x 系统内部命令。 getShardVersion √ √ √ - mergeChunks √ √ √ - setShardVersion x x x 系统内部命令。 shardCollection √ √ √ - shardingState x x x 系统内部命令。 unsetSharding x x x 系统内部命令。 split √ √ √ - splitChunk √ √ √ - splitVector √ √ √ - moveChunk √ √ √ - movePrimary √ x √ - isdbgrid √ √ √ - Administration Commands setFeatureCompatibilityVersion √ √ √ - renameCollection √ √ √ - dropDatabase √ √ √ - listCollections √ √ √ - drop √ √ √ - create √ √ √ - clone x x x 系统内部命令。 cloneCollection √ √ √ - cloneCollectionAsCapped √ √ √ - convertToCapped √ √ √ - filemd5 √ √ √ - createIndexes √ √ √ - listIndexes √ √ √ - dropIndexes √ √ √ - fsync √ √ √ - clean x x x 系统内部命令。 connPoolSync x x x 系统内部命令。 connectionStatus √ √ √ - compact x x x 高危命令。 collMod √ √ √ - reIndex √ √ √ - setParameter x x x 系统配置命令。 getParameter √ √ √ - repairDatabase x x x 高危命令。 repairCursor x x x 系统内部命令。 touch √ √ √ - shutdown x x x 高危命令。 logRotate x x x 高危命令。 killOp √ √ √ - releaseFreeMemory √ √ √ - Diagnostic Commands availableQueryOptions √ √ √ - buildInfo √ √ √ - collStats √ √ √ - connPoolStats x x x 系统内部命令。 cursorInfo x x x 系统内部命令。 dataSize √ √ √ - dbHash x x x 系统内部命令。 dbStats √ √ √ - diagLogging x x x 系统内部命令。 driverO IDT est x x x 系统内部命令。 explain √ √ √ - features √ √ √ - getCmdLineOpts x x x 系统内部命令。 getLog x x x 系统内部命令。 hostInfo x x x 系统内部命令。 isSelf x x x 系统内部命令。 listCommands √ √ √ - listDatabases √ √ √ - netstat x x x 系统内部命令。 ping √ √ √ - profile √ √ √ - serverStatus √ √ √ - shardConnPoolStats x x x 系统内部命令。 top √ √ √ - validate x x x 系统配置命令。 whatsmyuri √ √ √ - Internal Commands handshake x x x 系统内部命令。 _recvChunkAbort x x x 系统内部命令。 _recvChunkCommit x x x 系统内部命令。 _recvChunkStart x x x 系统内部命令。 _recvChunkStatus x x x 系统内部命令。 _replSetFresh x x x 系统内部命令。 mapreduce.shardedfinish x x x 系统内部命令。 _transferMods x x x 系统内部命令。 replSetHeartbeat x x x 系统内部命令。 replSetGetRBID x x x 系统内部命令。 _migrateClone x x x 系统内部命令。 replSetElect x x x 系统内部命令。 writeBacksQueued x x x 系统内部命令。 writebacklisten x x x 系统内部命令。 System Events Auditing Commands logApplicationMessage x x x 系统内部命令。 父主题: 数据库使用
  • 分析GeminiDB Mongo数据库的慢请求 GeminiDB Mongo数据库服务默认开启了慢请求Profiling ,系统自动将请求时间超过500ms的执行情况记录到对应数据库下的“system.profile”集合中。 通过Mongo Shell连接GeminiDB Mongo实例。 执行以下命令,进入指定数据库,以“test”为例。 use test 查看是否生成慢sql集合“system.profile”。 show collections; 回显中有“system.profile”,说明产生了慢SQL,继续执行下一步。 回显中没有“system.profile”,说明未产生慢SQL,该数据库不涉及慢请求分析。 查看数据下的慢请求日志。 db.system.profile.find().pretty() 分析慢请求日志,查找CPU使用率升高的原因。 下面是某个慢请求日志示例,可查看到该请求进行了全表扫描,扫描了1561632个文档,没有通过索引进行查询。 { "op" : "query", "ns" : "taiyiDatabase.taiyiTables$10002e", "query" : { "find" : "taiyiTables", "filter" : { "filed19" : NumberLong("852605039766") }, "shardVersion" : [ Timestamp(1, 1048673), ObjectId("5da43185267ad9c374a72fd5") ], "chunkId" : "10002e" }, "keysExamined" : 0, "docsExamined" : 1561632, "cursorExhausted" : true, "numYield" : 12335, "locks" : { "Global" : { "acquireCount" : { "r" : NumberLong(24672) } }, "Database" : { "acquireCount" : { "r" : NumberLong(12336) } }, "Collection" : { "acquireCount" : { "r" : NumberLong(12336) } } }, "nreturned" : 0, "responseLength" : 157, "protocol" : "op_command", "millis" : 44480, "planSummary" : "COLLSCAN", "execStats" : { "stage" : "SHARDING_FILTER", [3/1955] "nReturned" : 0, "executionTimeMillisEstimate" : 43701, "works" : 1561634, "advanced" : 0, "needTime" : 1561633, "needYield" : 0, "saveState" : 12335, "restoreState" : 12335, "isEOF" : 1, "invalidates" : 0, "chunkSkips" : 0, "inputStage" : { "stage" : "COLLSCAN", "filter" : { "filed19" : { "$eq" : NumberLong("852605039766") } }, "nReturned" : 0, "executionTimeMillisEstimate" : 43590, "works" : 1561634, "advanced" : 0, "needTime" : 1561633, "needYield" : 0, "saveState" : 12335, "restoreState" : 12335, "isEOF" : 1, "invalidates" : 0, "direction" : "forward", "docsExamined" : 1561632 } }, "ts" : ISODate("2019-10-14T10:49:52.780Z"), "client" : "xxx.xxx.xxx.xxx", "appName" : "MongoDB Shell", "allUsers" : [ { "user" : "__system", "db" : "local" } ], "user" : "__system@local" } 在慢请求日志中,您需要重点关注以下关键字。 全集合(全表)扫描:COLLSCAN 当一个操作请求(如QUERY、UPDATE、DELETE)需要全表扫描时,将大量占用CPU资源。在查看慢请求日志时,发现COLLSCAN关键字,很可能是这些查询占用了CPU资源。 如果该类操作请求较为频繁,建议您对查询的字段建立索引进行优化。 全集合(全表)扫描:docsExamined 通过查看参数“docsExamined”的值,可以查看一个查询扫描了多少文档。该值越大,请求的CPU使用率越高。 不合理的索引:IXSCAN、keysExamined 索引不是越多越好,过多索引会影响写入和更新的性能。 如果您的应用偏向于写操作,建立索引可能会降低写操作的性能。 通过查看参数“keysExamined”的值,可以查看一个使用了索引的查询,扫描了多少条索引。该值越大,请求的CPU使用率越高。 如果索引建立不太合理,或者匹配的结果很多。该场景下,即便使用了索引,请求的CPU使用率也不会降低很多,执行的速度也会很慢。 示例:对于某个集合的数据,a字段的取值很少(只有1和2),而b字段的取值很多。 如下所示,要实现 {a: 1, b: 2} 这样的查询。 db.createIndex( {a: 1} ) 效果不好,因为a相同取值太多 db.createIndex( {a: 1, b: 1} ) 效果不好,因为a相同取值太多 db.createIndex( {b: 1 } ) 效果好,因为b相同取值很少 db.createIndex( {b: 1, a: 1 }) 效果好,因为b相同取值少 关于{a: 1}与{b: 1, a: 1}的区别,可参考官方文档。 大量数据排序:SORT、hasSortStage 当查询请求中包含排序时,“system.profile”集合中的参数“hasSortStage”的值为“true”。如果排序无法通过索引实现,将在查询结果中进行排序。由于排序将占用大量CPU资源,该场景下,需要通过对经常排序的字段建立索引进行优化。 当您在“system.profile”集合中发现SORT关键字时,可以考虑通过索引来优化排序。 其他操作如建立索引、Aggregation(遍历、查询、更新、排序等动作的组合)也可能占用大量CPU资源,但本质上也适用以上几种场景。更多Profiling的设置,请参见官方文档。