华为云用户手册

  • Details for all databases 图3 Details for all databases 表6 Details for all databases字段解释 字段 注释 Query 执行的SQL。 (Execution) # 执行该SQL次数。 (Execution) Time 执行该SQL总时间。 (Execution) Avg time 执行该SQL平均时间。 (I/O Time) Read 读I/O等待时间。 (I/O Time) Write 写I/O等待时间。 (Blocks) Read 磁盘读页面数。 (Blocks) Hit 共享缓冲区命中页面数。 (Blocks) Dirtied 脏页面数。 (Blocks) Written 磁盘写页面数。 (Temp blocks) Read 磁盘读临时页面数。 (Temp blocks) Write 磁盘写临时页面数。
  • 安装 PoWA-archivist 安装PostgreSQL 12.6以后,通过wget命令获取PoWA-archivist源码: wget https://github.com/powa-team/powa-archivist/archive/refs/tags/REL_4_1_2.tar.gz 将下载好的REL_4_1_2.tar.gz进行解压。 进入解压后的目录,执行命令完成安装。 make && make install
  • 安装 PoWA-collector、PoWA-web 切换到RDS for PostgreSQL数据库安装用户下,本次演示使用的是postgres。 su - postgres psycopg2 是 PoWA-collector、powa-web安装必不可少的依赖环境。 pip install psycopg2 pip install powa-collector pip install powa-web 安装完成后,查看路径树如下所示,表示PoWA-collector、PoWA-web均已安装完成。 /home/postgres/.local/bin├── powa-collector.py├── powa-web└── __pycache__
  • 安全风险提醒 PoWA在进行部署配置中,会存在以下几个安全风险点: (远程模式时)在powa-repository中配置采集性能指标实例信息时,需要输入目标实例的IP、root用户帐号、连接口令,并且可以通过powa_servers表查询到相关信息,其中连接口令以明文形式呈现,存在安全风险。 在PoWA-collector配置文件中,powa-repository的连接信息中无连接口令配置,表示powa-repository对于PoWA-collector的连接配置项必须为trust,存在安全风险。 在PoWA-web配置文件中,可选配置username、password对应powa-repository(远程模式)或者数据库实例(本地模式)的root用户及连接口令,且以明文形式存储,存在安全风险。 在使用PoWA插件时,请悉知以上安全风险。可以参考PoWA官方手册进行安全加固。
  • Background Writer 图2 Background Writer性能指标 表3 Checkpointer scheduling字段解释 字段 说明 of requested checkpoints 已执行的请求检查点数。 of scheduled checkpoints 已执行的预定检查点数。 表4 Checkpointer activity字段解释 字段 说明 Buffers alloc 分配的缓冲区数。 Sync time 文件同步到磁盘的检查点处理部分所花费的总时间(单位 : 毫秒)。 Write time 在将文件写入磁盘的检查点处理部分中花费的总时间(单位 : 毫秒)。 表5 Background writer字段解释 字段 说明 Maxwritten clean 后台编写器因写入过多缓冲区而停止清理扫描的次数。 Buffers clean 后台写入器写入的缓冲区数。 表6 Backends字段解释 字段 说明 Buffers backend fsync 后端必须执行自己的 fsync 调用的次数。 Buffers backend 后端直接写入的缓冲区数。
  • General Overview 图1 General Overview性能指标 表1 Query runtime per second (all databases)字段解释 字段 说明 Queries per sec 每秒执行查询的次数。 Runtime per sec 每秒执行的查询的总持续时间。 Avg runtime 平均查询时长。 表2 Block access in Bps字段解释 字段 说明 Total hit 在共享缓冲区中找到的数据量。 Total read 在操作系统缓存中找到或从磁盘读取的数据量。
  • Database Objects 图3 Database Objects性能指标 表7 Access pattern字段解释 字段 说明 Index scans ratio 索引扫描/序列扫描的比率。 Index scans 每秒索引扫描次数。 Sequential scans 每秒顺序扫描次数。 表8 DML activity字段解释 字段 说明 Tuples inserted 每秒插入的行数。 Tuples updated 每秒更新的行数。 Tuples HOT updated 每秒更新(HOT)。 Tuples deleted 每秒删除的行数。 表9 Vacuum activity字段解释 字段 说明 # Vacuum 每秒手动清理的次数。 # Autovacuum 每秒自动清理的次数。 # Analyze 每秒手动分析的次数。 # Autoanalyze 每秒自动分析的次数。
  • Details for all databases 图4 Details for all databases性能指标 表10 字段 注释 Database 数据库名称。 #Calls 执行SQL总数。 Runtime 执行SQL总耗时。 Avg runtime 执行SQL平均耗时。 Blocks read 磁盘读取的页面数。 Blocks hit 共享缓冲区命中的页面数。 Blocks dirtied 脏页数。 Blocks written 磁盘写页面数。 Temp Blocks written 磁盘写临时页面数。 I/O time I/O等待时间。
  • RDS for MySQL产品优势 低成本 享更多的服务 只需支付实例费用,无需其他硬件、托管等费用。 超高性能 极致用户体验 100%兼容MySQL应用。 高并发性能满足苛刻性能要求。 支持大量连接,响应更快速。 高安全性 保证数据库安全 网络隔离、访问控制、传输加密、存储加密、防DDos攻击,全系列的数据库高安全等级,保证数据库安全。 华为云的108项关键安全能力,在国内首家通过NIST CS F网络安全框架的最高等级认证。 高可靠性 多种部署及容灾方案 数据备份、数据恢复、双机热备、异地容灾、同城容灾,多种部署及容灾方案,为数据可靠性保驾护航。
  • 资源规划 表1 资源规划 类别 子类 规划 备注 RDS RDS实例名 rds-mysql 自定义,易理解可识别。 数据库版本 MySQL 5.7 - 实例类型 单机 本示例中为单机。 实际使用时,为提升业务可靠性,推荐选择主备RDS实例。 存储类型 SSD云盘 - 可用区 可用区3 本示例中为单机。 实际业务场景推荐选择主备RDS实例,此时建议将两个实例创建在不同的可用区,提升业务可靠性。 规格 通用性 4 vCPUs | 8GB - DRS迁移任务 迁移任务名 DRS-mysql 自定义 源数据库引擎 MySQL 本示例中源数据库为自建MySQL,即在华为云弹性云服务器上安装社区版MySQL。 目标数据库引擎 MySQL 本示例中目标数据库也是MySQL,使用的云数据库 RDS for MySQL实例。 网络类型 VPC网络 本示例中采用“VPC网络”。 父主题: 自建MySQL迁移到RDS for MySQL
  • 部署架构对比 单可用区 实例选择单可用区部署时,实例下的所有组件均部署在相同的可用区内。单可用区部署会默认配置为反亲和部署。反亲和部署是出于高可用性考虑,将Primary、Secondary和Hidden节点分别创建在不同的物理机上。 多可用区 实例选择多可用区部署时,实例下的组件分别部署在三个不同的可用区内,可实现跨可用区容灾部署能力。 Mongos节点最少为两个,分别部署在两个可用区中,当增加第三个Mongos节点时,默认部署在第三个可用区。 每个Shard节点中的Primary节点、Secondary节点与Hidden节点随机均衡的部署在三个可用区中。 图1 多可用区部署
  • 事件监控简介 事件监控提供了事件类型数据上报、查询和告警的功能。方便您将业务中的各类重要事件或对云资源的操作事件收集到 云监控服务 ,并在事件发生时进行告警。 事件即 云监控 服务保存并监控的文档数据库DDS资源的关键操作,您可以通过“事件”了解到谁在什么时间对系统哪些资源做了什么操作,如删除只读节点、规格变更等。 事件监控为您提供上报自定义事件的接口,方便您将业务产生的异常事件或重要变更事件采集上报到云监控服务。 事件监控默认开通,您可以在事件监控中查看系统事件和自定义事件的监控详情,目前支持的系统事件请参见事件监控支持的事件说明。 父主题: 事件监控
  • 备份原理 集群实例 集群实例由Mongos(路由)、Config(配置)和Shard(分片)组件构成。其中,Config主要用于存储集群实例的配置信息,Shard节点主要用于存储集群实例的数据信息。所以集群实例在备份时,需要分别备份Config节点和Shard节点上的数据,且Config节点和Shard节点是分开进行备份的。如图1所示,集群实例的备份是由Config节点和Shard节点分别在各自的Hidden节点上进行,备份过程会占用Hidden节点一定的CPU内存资源。因此,在备份期间,实例的Hidden节点的CPU使用率、内存使用率、主备延时指标会有一点升高,属于正常现象。但最终的备份文件将以压缩包的形式存储在 对象存储服务 (OBS)中,不会占用实例的磁盘空间。 图1 集群备份原理图 副本集实例 如图2所示,副本集实例的备份在Hidden节点上进行。备份过程会占用Hidden节点一定的CPU内存资源。因此,在备份期间,实例的Hidden节点的CPU使用率、内存使用率、主备延时指标会有一点升高,属于正常现象。但最终的备份文件将以压缩包的形式存储在对象存储服务(OBS)中,不会占用实例的磁盘空间。 图2 副本集备份原理图 单节点实例 单节点的备份是在仅有的一个节点上进行的,最终的备份文件将以压缩包的形式存储在对象存储服务(OBS)中,不会占用实例的磁盘空间。 单节点的备份基于mongodump实现,备份过程中会额外占用节点的CPU、内存等资源,资源不足时会出现备份失败的情况。建议迁移到副本集实例进行备份。 图3 单节点备份原理图
  • 备份与恢复方案 表1提供了常见的数据备份和下载备份文件的方法。 表1 备份方案 任务类型 备份或恢复类型 支持的实例类型 使用场景 数据备份 自动备份 集群、副本集、单节点 您可以通过控制台对DDS进行自动备份。 增量备份 集群、副本集 您可以通过控制台对DDS进行增量备份。 跨区域备份 集群、副本集、单节点 您可以通过控制台对DDS进行跨区域备份。 手动备份 集群、副本集、单节点 您可以通过控制台对DDS进行手动备份。 通过mongodump工具备份 集群、副本集、单节点 您可以通过MongoDB客户端自带的备份恢复工具对自建MongoDB或云上MongoDB数据库进行手动备份。 通过mongoexport工具备份 集群、副本集、单节点 您可以通过MongoDB客户端自带的备份恢复工具对自建MongoDB或云上MongoDB数据库进行手动备份。 下载备份文件 使用OBS Browser+下载 集群、副本集、单节点 备份文件大于400MB时,适合使用OBS Browser+下载。 使用浏览器直接下载 副本集、单节点 适合通过浏览器直接下载备份文件。 按地址下载 集群、副本集、单节点 适用于通过浏览器新窗口、迅雷或者wget等方式下载备份文件。 DDS详细的恢复方案请参见恢复方案。
  • 迁移方案概览 DDS提供了多种数据迁移方案,可满足不同业务场景下的MongoDB数据库迁移。 表1 迁移方案 迁移场景 支持的迁移类型 文档链接 使用导出导入工具迁移数据 全量迁移 通过mongoexport和mongoimport工具迁移数据 通过mongodump和mongorestore工具迁移数据 其他云数据库MongoDB迁移至华为云DDS 全量+增量迁移 其他云数据库 MongoDB迁移至华为云DDS 本地自建MongoDB数据库迁移至华为云DDS 全量+增量迁移 本地自建MongoDB数据库迁移至华为云DDS ECS自建MongoDB数据库迁移至华为云DDS 全量+增量迁移 ECS自建MongoDB数据库迁移至华为云DDS 华为云DDS迁移至用户端MongoDB数据库 全量+增量迁移 华为云DDS迁移至用户端MongoDB数据库 父主题: 数据迁移
  • 数据库读写性能提升 常见的排查点: 如果数据库有直接报错信息Timeout,需要检查实例的连接数是否已达到上限。 检查方法:通过查看监控指标,查看当前活动连接数是否已经达到当前实例支持的最大连接数。 解决方案:请参见实例的连接数满导致实例连接失败,如何处理。 检查连接方式是否合理。 检查方法:检查连接实例时,集群实例是否同时连接了多个mongos节点,副本集是否同时连接了主节点和备节点。 解决方案:如果是集群实例,连接实例时建议同时连接多个mongos节点,这样可以分担负载并提高可用性;如果是副本集实例,建议同时连接主备节点,这样不仅提升了数据读写性能,而且避免了在发生主备节点切换后,从客户端写入数据报错的问题。 分析实例的监控指标是否存在异常。 检查方法:通过查看监控指标,观察CPU使用率、内存使用率等使用情况。 解决方案:如果CPU和内存指标异常,需要检查客户端业务或者实例数据是否过于集中,造成负载过高。客户端业务过于集中,则需要客户端进行架构优化。数据过于集中,则需要对数据进行必要的分片。 检查慢日志是否过多。 检查方法:请参见查看慢日志。 解决方案:请参见慢操作优化。 其他的注意点: 执行查询时,只选择需要返回的字段,不需要的字段不要返回。修改数据时,只修改变化需要修改的字段,不要整个对象直接存储全部修改。从而减少网络和进程处理的负载。 同一个业务场景,能一次查询返回的必须一次查询 ,减少和数据库的交互次数。 单个实例中,数据库的总的个数不要超过200个,总的集合个数不要超过500个。 业务上线前,一定要对数据库进行性能压测,评估业务峰值场景下,对数据库的负载情况。 禁止同时执行大量并发事务,且长时间不提交。 业务正式上线前,所有的查询类别,都应该先执行查询计划检查查询性能。 检查实例规格的性能基线,分析当前的业务需求是否达到上限。 父主题: 性能调优
  • 分析DDS数据库正在执行的请求 通过Mongo Shell连接DDS实例。 开通公网访问的实例,具体请参见: 通过公网连接集群实例 通过公网连接副本集实例 通过公网连接单节点实例 未开通公网访问的实例,具体请参见: 通过内网连接集群实例 通过内网连接副本集实例 通过内网连接单节点实例 执行以下命令,查看数据库当前正在执行的操作。 db.currentOp() 回显如下: { "raw" : { "shard0001" : { "inprog" : [ { "desc" : "StatisticsCollector", "threadId" : "140323686905600", "active" : true, "opid" : 9037713, "op" : "none", "ns" : "", "query" : { }, "numYields" : 0, "locks" : { }, "waitingForLock" : false, "lockStats" : { } }, { "desc" : "conn2607", "threadId" : "140323415066368", "connectionId" : 2607, "client" : "172.16.36.87:37804", "appName" : "MongoDB Shell", "active" : true, "opid" : 9039588, "secs_running" : 0, "microsecs_running" : NumberLong(63), "op" : "command", "ns" : "admin.", "query" : { "currentOp" : 1 }, "numYields" : 0, "locks" : { }, "waitingForLock" : false, "lockStats" : { } } ], "ok" : 1 }, ...} client:发起请求的客户端。 opid:操作的唯一标识符。 secs_running:该操作已经执行的时间,单位:秒。如果该字段返回的值特别大,需要查看请求是否合理。 microsecs_running:该操作已经执行的时间,单位:微秒。如果该字段返回的值特别大,需要查看请求是否合理。 op:操作类型。通常是query、insert、update、delete、command中的一种。 ns:操作目标集合。 其他参数详见db.currentOp()命令官方文档。 根据命令执行结果,分析是否有异常耗时的请求正在执行。 如果业务日常运行的CPU使用率不高,由于执行某一操作使得CPU使用率过高,导致业务运行缓慢,该场景下,您需要关注执行耗时久的请求。 如果发现异常请求,您可以找到该请求对应的opid,执行db.killOp(opid)命令终止该请求。
  • 解决方案 控制并发连接数。连接数据库时,需要计算业务一共有多少个客户端, 每个客户端配置的连接池大小是多少,总的连接数不宜超过当前实例能承受的最大连接数的80%。连接太多会导致内存和多线程上下文的开销增加,影响请求处理延时。 建议配置连接池,连接池最大不要超过200。 降低单次请求的内存开销,例如通过创建索引减少集合的扫描、内存排序等。 在连接数合适的情况下内存占⽤持续增⾼,建议升级内存配置,避免可能存在内存溢出和大量清除缓存而导致系统性能急剧下降。 集群实例,请参见变更集群实例的CPU和内存规格。 副本集实例,请参见变更副本集实例的CPU和内存规格。 单节点实例,请参见变更单节点实例的CPU和内存规格。
  • 分析服务能力 经过前面数据库正在执行的请求和慢请求的分析和优化,所有的请求都使用了合理的索引,CPU的使用率相对趋于稳定。如果经过前面的分析排查,CPU使用率仍然居高不下,则可能是因为当前实例已达到性能瓶颈,不能满足业务需要,此时您可以通过如下方法解决。 通过查看监控信息分析实例资源的使用情况,详情请参见查看监控指标。 对DDS进行规格变更或者添加分片数量。具体操作请根据当前的实例类型参考如下文档。 添加集群实例的节点数量 变更集群实例的CPU和内存 添加副本集实例的节点数量 变更副本集实例的CPU和内存 变更单节点实例的CPU和内存
  • 解决方案 对于集群实例,可能是因为选择和设置的分片不合理导致数据分布不均衡,从而引起磁盘空间使用率高的情况。 此时,可以对数据库集合进行合适的分片,具体操作请参见设置数据分片以充分利用分片性能。 随着业务数据的增加,原来申请的数据库磁盘容量不足。此时建议扩容磁盘空间,确保磁盘空间足够。 集群实例,请参见扩容集群实例的磁盘空间。 副本集实例,请参见扩容副本集实例的磁盘空间。 单节点实例,请参见扩容单节点实例的磁盘空间。 如果原有实例规格的磁盘已是最大的,请先升级规格。 集群实例,请参见变更集群实例的CPU和内存规格。 副本集实例,请参见变更副本集实例的CPU和内存规格。 单节点实例,请参见变更单节点实例的CPU和内存规格。 存在大量过期的数据文件占用磁盘空间,此时需要及时处理过期数据文件。例如:如果整个库不需要了,则可以执行dropDatabase命令进行删除,从而快速释放磁盘空间。 后台数据处理机制原因。 因为无论是写入、更新或删除等操作(包括索引插入和删除等操作),在后台实际上都会转成写入。因为底层的存储引擎(WiredTiger和RocksDB),采用都是appendOnly机制。只有当存储引擎内部数据状态满足一定条件后,会触发内部的compaction操作,进行数据压缩,进而释放磁盘空间。 所以有时候会发现,磁盘占用量比实际数据量大,实际上这只是“看起来大”,并不会影响用户的使用。因为内部有些数据压缩,是延时操作,没有立即执行。随着数据的继续写入,会触发后台执行数据压缩清理空间。
  • 选择合适的数据分布策略 分片集群支持将单个集合的数据分散存储在多个分片上,用户可以根据集合内文档的分片键来分布数据。 目前,主要支持两种数据分布策略,即范围分片(Range based sharding)和Hash分片(Hash based sharding),设置方式请参见4。 下面分别介绍这两种数据分布策略以及各自的优缺点。 范围分片 基于范围进行分片,即集群按照分片键的范围把数据分成不同部分。假设有一个数字分片键,为一条从负无穷到正无穷的直线,每一个片键的值均在直线上进行标记。可以理解为将该直线划分为更短的不重叠的片段,并称之为数据块,每个数据块包含了分片键在一定的范围内的数据。 图1 数据分布示意图 如上图所示,x表示范围分片的片键,x的取值范围为[minKey,maxKey],且为整型。将整个取值范围划分为多个chunk,每个chunk(通常配置为64MB)包含其中一小段的数据。其中,chunk1包含x值在[minKey, -75]中的所有文档,每个chunk的数据都存储在同一个分片上,每个分片可以存储多个chunk,并且chunk存储在分片中的数据会存储在config服务器中,mongos也会根据各分片上的chunk的数据自动执行负载均衡。 范围分片能够很好的满足范围查询的需求,例如,查询x的取值在[-60,20]中的文档,仅需mongos将请求路由到chunk2。 范围分片的缺点在于,如果分片键有明显递增(或递减)趋势,新插入的文档很大程度上会分布到同一个chunk,从而无法扩展写的能力。例如,使用“_id”作为分片键,集群自动生成id的高位值将是递增的时间戳。 Hash分片 根据用户的分片键值计算出Hash值(长度64bit且为整型),再按照范围分片策略,根据Hash值将文档分布到不同的chunk中。基于Hash分片主要的优势为保证数据在各节点上分布基本均匀,具有“相近”片键的文档很可能不会存储在同一个数据块中,数据的分离性更高。 图2 数据分布示意图 Hash分片与范围分片互补,能将文档随机分散到各个chunk,充分扩展写能力,弥补范围分片的不足。但所有的范围查询要分发到后端所有的分片,才能获取满足条件的文档,查询效率低。
  • 选择合适的分片键 背景 分片集群中数据的分片以集合为基础单位,集合中的数据通过分片键被分成多个部分。分片键是在集合中选择的一个合适的字段,数据拆分时以该分片键的值为依据均衡地分布到所有分片中。如果您没有选择到合适的的分片键,可能会降低集群的使用性能,出现执行分片语句时执行过程卡住的问题。 分片键一旦设置后不能再更改。如果未选取到合适的分片键,需要使用正确的分片策略,将数据迁移到新的集合后重新执行分片。 合适的分片键的特点 所有的插入、更新以及删除操作,将会均匀分发到集群中的所有分片中。 key的分布足够离散。 尽量避免scatter-gather查询。 如果所选分片键不具备以上所有特点,将会影响集群的读写扩展性。例如,通过find()操作读取的工作量在分片中非均匀分布,最终会产生查询热分片。同样,如果写工作量(插入、更新和修改)在分片中非均匀分布,最终会产生写热分片,严重限制分片的优势。因此,您需要根据应用读写状态(重读取还是重写入)、经常查询及写入的数据等业务需求,调整您的分片键。 需要注意,对已有数据分片后,如果update请求的filter中未携带片键字段并且选项upsert:true或者multi:false,那么update 请求会报错,并返回“An upsert on a sharded collection must contain the shard key and have the simple collation.” 判断标准 您可以通过表2中的几个维度,判断所选分片键是否能够满足业务需求。 表2 合理分片键的判断依据 判断依据 说明 片键基数 片键基数是指划分数据块的能力。例如,要记录某个学校的学生信息,由于学生的年龄比较集中,如果选择年龄作为分片键,同一个数据段中将存储很多同龄学生的数据,影响集群的性能以及可管理性。由于学生的学号唯一,如果选择学号作为分片键,分片基数较大,有利于数据的均匀分布。 写分布 若用户业务在同一时间段有大量写操作,则希望这些写操作能够均匀分布到各个分片上。如果数据分布策略为范围分片,并以一个单调递增的值作为分片键,此时,大量写入的数据同样是片键字段递增,数据将写入同一个分片。 读分发 若用户业务在同一时间段有大量读操作,则希望这些读操作能够均匀分布到各个分片上,以充分利用各分片节点的计算性能。 定向读 mongos查询路由器可以执行定向查询(只查询一个分片)或scatter/gather查询(查询所有分片)。只有查询中存在分片键,mongos才能定位到单一分片,因此,您需要选择在业务运行时可用于普遍查询的分片键。如果您选择合成的分片键,将无法在定向查询中使用该片键,所有的查询方式将变成scatter/gather查询,从而限制扩展读数据的能力。
  • 数据库和集合的创建 使用短字段名,以节约存储空间。文档数据库与关系型数据库不同,集合中的每个文档都存储字段名,使用短字段名可以有效的节约存储空间。 有效的控制集合中的文档数量,避免影响查询性能。如果有必要,可以进行定期归档。 每条文档都提供默认的“_id”值,禁止向“_id”中保存自定义值。 固定集合相较其他集合,插入速度快,并且能够自动删除旧数据。用户可以根据业务需要,选择创建固定集合以提高性能。
  • 查询操作 索引 根据业务需求,对经常查询的数据字段创建适当的索引。需注意,索引会占用一些空间,并且插入操作和索引更新会消耗资源。因此,建议每个集合的索引数量不超过5个。 案例:出现数据查询缓慢,如果没有创建索引,建议对经常查询的数据字段创建适当的索引,优化查询速度。 对于包含多个键的查询,建议创建包含这些键的复合索引。复合索引的键值顺序很关键,需遵循索引最左前缀原则,查询应包含最左索引字段,以索引创建顺序为准,与查询字段顺序无关。 给索引添加TTL属性,自动筛选过期文档并删除。创建TTL的索引必须是日期类型。TTL索引是单字段索引,而非复合索引。 需要在集合中某个字段上创建索引,但当集合中大量文档不包含该键值时,建议创建稀疏索引。 创建文本索引时,字段指定text,而不是1或者-1。每个集合只有一个文本索引,但它可以为任意多个字段建立索引。 命令使用 使用findOne方法,在数据库中查询匹配多个项目,将会在自然排序文件集合中返回第一个项目。如果需要返回多个文档,则使用find方法。 如果查询无需返回整个文档,或只是用来判断键值是否存在,可以通过投影$project来限制返回字段,减少网络流量和客户端的内存使用。 除了前缀样式查询,正则表达式查询执行的时间比大多数选择器更久,不建议使用索引。 查询中的某些含“$”的操作符可能会降低使用性能。在业务中尽量不要使用该类操作符:$or、$nin、$not、$ne、$exists。 表1 操作符说明 操作符 说明 $or 有多少个条件就会查询多少次,最后合并结果集,建议替换为$in。 $nin 可能会匹配到大多数的索引,此时,查询优化器会退化为全表扫描。 $not 可能会导致查询优化器无法匹配到具体的索引,退化为全表扫描。 $ne 选择字段值不等于指定值的文档,如果多数为取相反值的文档,将会扫描整个索引。 $exists 对于松散的文档结构,查询必须遍历每一个文档。 更多信息,请参见MongoDB官方文档。 注意事项 操作符$where和$exists中不能使用索引。 如果查询结果需要排序,尽量控制结果集的数量。 涉及多个字段的索引时,尽量将用于精确匹配的字段放在索引的前面。 如果查询条件中的键值顺序和复合索引中的创建顺序不一致,DDS会自动优化为查询跟索引顺序一致。 修改操作 通过操作符对文档进行修改,通常可以获得更好的性能。该方式不需要往返服务器来获取并修改文档数据,在序列化和传输数据上花费更少的时间。 批量插入 批量插入(batchInsert)可以减少数据向服务器的提交次数,提高使用性能。批量提交的数据的BSON Size不超过48MB。 聚合运算 聚合运算中,$match需前置于$group,减少$group操作符要处理的文档数量。
  • 数据库实例状态 表1 状态和说明 状态 说明 正常 数据库实例运行正常。 异常 数据库实例不可用。 创建中 正在创建数据库实例。 创建失败 数据库实例创建失败。 备份中 正在创建数据库实例备份。 重启中 按照用户请求,或修改需要重启才能生效的数据库参数后,重启实例中。 主备切换中 正在切换副本集实例及集群实例的shard、config的主备节点。 节点扩容中 正在扩容集群实例的shard或mongos节点个数。 删除节点中 正在删除添加失败的节点。 存储扩容中 正在扩容实例的磁盘大小。 规格变更中 正在变更实例的CPU和内存规格。 转包周期中 实例的计费方式正在由“按需计费”转为“包年/包月”。 恢复检查中 该实例下的备份正在恢复到新实例。 恢复中 该实例下的备份正在恢复到已有实例。 恢复失败 通过备份恢复到已有实例失败。 切换SSL中 正在开启或关闭SSL通道。 慢日志配置修改中 正在切换慢日志明文显示开关。 修改内网地址中 正在修改节点的内网IP地址。 修改端口号中 正在修改数据库实例的端口。 修改安全组中 正在修改数据库实例的安全组。 冻结 账户余额小于或等于0元,系统对该用户下的实例进行冻结。您需前往费用中心充值成功,欠款核销后,冻结的实例才会解冻。 补丁升级中 正在进行补丁升级。 包周期变更资源检查中 包周期实例在进行变更过程中所持续的状态。
  • 恢复mongos节点 准备mongos节点的配置文件和目录。 rm -rf /compile/cluster-restore/mgs* mkdir -p /compile/cluster-restore/mgs1/log mkdir -p /compile/cluster-restore/mgs2/log 配置文件(restoreconfig/mongos_40301.yaml)。 net: bindIp: 127.0.0.1 port: 40301 unixDomainSocket: {enabled: false}processManagement: {fork: true, pidFilePath: /compile/cluster-restore/mgs1/mongos.pid}sharding: {configDB: 'config/127.0.0.1:40303,127.0.0.1:40304,127.0.0.1:40305'}systemLog: {destination: file, logAppend: true, logRotate: reopen, path: /compile/cluster-restore/mgs1/log/mongos.log} 配置文件(restoreconfig/mongos_40302.yaml)。 net: bindIp: 127.0.0.1 port: 40302 unixDomainSocket: {enabled: false}processManagement: {fork: true, pidFilePath: /compile/cluster-restore/mgs2/mongos.pid}sharding: {configDB: 'config/127.0.0.1:40303,127.0.0.1:40304,127.0.0.1:40305'}systemLog: {destination: file, logAppend: true, logRotate: reopen, path: /compile/cluster-restore/mgs2/log/mongos.log} 启动mongo节点。 ./mongos -f restoreconfig/mongos_40301.yaml ./mongos -f restoreconfig/mongos_40302.yaml 父主题: 恢复集群备份到本地自建数据库
  • 支持审计的关键操作列表 通过 云审计 服务,您可以记录与文档数据库服务相关的操作事件,便于日后的查询、审计和回溯。 表1 文档数据库服务的关键操作列表 操作名称 资源类型 事件名称 恢复到新实例 instance ddsRestoreToNewInstance 恢复到已有实例 instance ddsRestoreToOldInstance 创建实例 instance ddsCreateInstance 删除实例 instance ddsDeleteInstance 重启实例 instance ddsRestartInstance 扩节点 instance ddsGrowInstance 扩磁盘 instance ddsExtendInstanceVolume 重置数据库密码 instance ddsResetPassword 实例重命名 instance ddsRenameInstance 切换SSL instance ddsSwitchSsl 修改实例端口 instance ddsModifyInstancePort 创建备份 backup ddsCreateBackup 删除备份 backup ddsDeleteBackup 设置备份策略 backup ddsSetBackupPolicy 应用参数模板 parameterGroup ddsApplyConfigurations 复制参数模板 parameterGroup ddsCopyConfigurations 重置参数模板 parameterGroup ddsResetConfigurations 创建参数模板 parameterGroup ddsCreateConfigurations 删除参数模板 parameterGroup ddsDeleteConfigurations 更新参数模板 parameterGroup ddsUpdateConfigurations 绑定公网IP instance ddsBindEIP 解绑公网IP instance ddsUnBindEIP 修改标签 tag ddsModifyTag 删除实例标签 tag ddsDeleteInstanceTag 添加实例标签 tag ddsAddInstanceTag 扩容失败回退 instance ddsDeleteExtendedDdsNode 规格变更 instance ddsResizeInstance 实例解冻 instance ddsUnfreezeInstance 实例冻结 instance ddsFreezeInstance 修改内网地址 instance ddsModifyIP 修改内网域名 instance ddsModifyDNSName 设置集群均衡开关 instance ddsSetBalancer 内部通信方式切换 instance ddsSwitchInnerSsl 添加只读节点 instance AddReadonlyNode 集群开启shard/config IP instance ddsCreateIp 修改实例安全组 instance ddsModifySecurityGroup 迁移可用区 instance ddsMigrateAvailabilityZone 实例备注 instance ddsModifyInstanceRemark 可维护时间段 instance ddsModifyInstanceMaintenanceWindow 补丁升级 instance ddsUpgradeDatastorePatch 主备切换 instance ddsReplicaSetSwitchover 跨网段访问配置 instance ddsModifyInstanceSourceSubnet 实例参数修改 parameterGroup ddsUpdateInstanceConfigurations 实例导出参数模板 parameterGroup ddsSaveConfigurations 设置跨区域备份策略 backup ddsModifyOffsiteBackupPolicy 慢日志开启明文显示 instance ddsOpenSlowLogPlaintextSwitch 慢日志关闭明文显示 instance ddsCloseSlowLogPlaintextSwitch 下载错误/慢日志 instance ddsDownloadLog 实例开启审计策略 instance ddsOpenAuditLog 实例关闭审计策略 instance ddsCloseAuditLog 实例下载审计日志 instance ddsDownloadAuditLog 实例删除审计日志 instance ddsDeleteAuditLogFile 回收站策略 instance ddsModifyRecyclePolicy 父主题: 审计
  • DDS自定义策略样例 示例1:授权用户创建文档数据库实例 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dds:instance:create" ] } ]} 示例2:拒绝用户删除文档数据库实例 拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先原则。 如果您给用户授予DDS FullAccess的系统策略,但不希望用户拥有DDS FullAccess中定义的删除文档数据库实例权限,您可以创建一条拒绝删除文档数据库实例的自定义策略,然后同时将DDS FullAccess和拒绝策略授予用户,根据Deny优先原则,则用户可以对DDS执行除了删除文档数据库实例外的所有操作。拒绝策略示例如下: { "Version": "1.1", "Statement": [ { "Effect": "Deny" "Action": [ "dds:instance:deleteInstance" ], } ]} 示例3:多个授权项策略 一个自定义策略中可以包含多个授权项,且除了可以包含本服务的授权项外,还可以包含其他服务的授权项,可以包含的其他服务必须跟本服务同属性,即都是项目级服务或都是全局级服务。多个授权语句策略描述如下: { "Version": "1.1", "Statement": [ { "Action": [ "dds:instance:create", "dds:instance:modify", "dds:instance:deleteInstance", "vpc:publicIps:list", "vpc:publicIps:update" ], "Effect": "Allow" } ] }实例4:授权资源策略一个自定义策略可以设置资源策略,表示在当前的action下面,拥有哪些资源的操作权限,目前支持实例名称的配置,可以用*来表示通配符。授权资源策略的描述如下:{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dds:instance:list" ] }, { "Effect": "Allow", "Action": [ "dds:instance:modify" ], "Resource": [ "DDS:*:*:instanceName:dds-*" ] } ]}
  • 使用须知 副本集实例恢复到指定时间点时,目前支持恢复到新实例和当前实例。 账户余额大于等于0元,才可恢复到新实例。 目前只有4.0版本的副本集实例支持恢复到指定时间点。 开启自动备份策略后,才允许恢复到指定时间点。 实例下能够恢复的到指定时间点的数据库不包括local数据库。 为了数据的安全性,增备恢复到指定时间点屏蔽了dropDatabase的操作。因此恢复后可能会存在残留空的库或view,用户可自行删除。
  • 策略语法 给用户组选择策略时,单击策略下方的,可以查看策略的详细内容,以“DDS Administrator”为例,说明RBAC策略的语法。 图2 DDS Administrator策略 { "Version": "1.0", "Statement": [ { "Effect": "Allow", "Action": [ "DDS:DDS:*" ], "Resource": [ "DDS:*:*:instanceName:dds-*" ], } ], "Depends": [ { "catalog": "BASE", "display_name": "Server Administrator" }, { "catalog": "BASE", "display_name": "Tenant Guest" } ]} 表1 参数说明 参数 含义 值 Version 策略的版本 固定为“1.0”。 Statement Action 定义对DDS的具体操作。 格式为:服务名:资源类型:操作 "DDS:DDS:*",表示对DDS的所有操作,其中DDS为服务名称;“*”为通配符,表示对DDS资源可以执行所有操作。 Effect 定义Action中所包含的具体操作是否允许执行。 Allow:允许执行。 Deny:不允许执行。 Resource 定义资源粒度的鉴权 非必传,“DDS:*:*:instanceName:dds-*”表示对所有dds-开头的实例拥有配置的action权限,如果没有配置,那么默认拥有所有实例的权限 Depends catalog 依赖的策略的所属服务。 服务名称 例如:BASE display_name 依赖的策略的名称。 权限名称 例如:Server Administrator
共100000条