云服务器内容精选

  • 如何查看DWS表是行存还是列存? 表的存储方式由建表语句中的ORIENTATION参数控制,row表示行存,column表示列存。 不指定ORIENTATION参数,默认为row行存。 查看已创建的表是行存还是列存,可通过表定义函数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) 父主题: 数据库使用
  • 支持与限制的命令 用户在连接到社区版文档数据库后,需要关注以下支持以及限制的命令。 更多信息,请参见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 系统内部命令。 父主题: 数据库使用
  • 数据库连接 使用DDS时,可能会遇到因为Mongod/dds mongos的连接数满了,导致客户端无法连接的问题。在Mongod/dds mongos的服务端,收到一个新的连接由一个单独的线程来处理,每个线程配置了1MB的栈空间,当网络连接数太多时,过多的线程会导致上下文切换开销变大,同时内存开销也会上涨。 客户端连接数据库的时候,要计算业务一共有多少个客户端,每个客户端配置的连接池大小是多少,总的连接数不要超过当前实例能承受的最大连接数的80%。 客户端与数据库的连接应尽量保持相对稳定的状态,每秒新增连接数建议保持在10以下。 建议客户端的连接超时时间至少设置为最大业务执行时长的3倍。 对于副本集实例,客户端需要同时配置主备节点的IP地址;对于集群实例,至少配置两个dds mongos的IP地址。 DDS默认提供rwuser用户,使用rwuser用户登录时认证库必须是admin。
  • 性能相关 规范 业务程序禁止执行全表扫描的查询。 执行查询时,只选择需要返回的字段,不需要的字段不要返回。从而减少网络和进程处理的负载,修改数据时,只修改变化需要修改的字段,不要整个对象直接存储全部修改。 避免使用$not。DDS并不会对缺失的数据进行索引,因此$not的查询条件将会要求在一个结果集中扫描所有记录。如果$not是唯一的查询条件,会对集合执行全表扫描。 用$and时把匹配最少结果的条件放在最前面,用$or时把匹配最多结果的条件放在最前面。 单个实例中,数据库的总的个数不要超过200个,总的集合个数不要超过500个。集合数量过多会导致内存压力变高,并且集合数量多会导致重启以及主备倒换性能变差,影响紧急情况下的高可用性能。 业务上线前,一定要对数据库进行性能压测,评估业务峰值场景下,对数据库的负载情况。 禁止同时执行大量并发事务,且长时间不提交。 业务正式上线前, 所有的查询类别,都应该先执行查询计划检查查询性能。 建议 每个连接在后台都是由一个单独线程处理,每个线程会分配1MB的栈内存。所以连接数不宜过多,否则会占用过多的内存。 使用连接池,避免频繁的建立连接和断开连接,否则会导致CPU过高。 减少磁盘读写:避免使用不必要的upsert命令,避免查询不必要的数据。 优化数据分布:对数据进行分片,同时分散热点数据,均衡地使用实例资源。如何进行数据分片,请参见设置数据分片。 减少锁冲突:避免对同一个Key过于频繁地操作。 减少锁等待:避免前台创建索引。 注意 开发过程中对集合的每一个操作都要通过执行explain()检查其执行计划,如: db.T_DeviceData.find({"deviceId":"ae4b5769-896f"}).explain(); db.T_DeviceData.find({"deviceId":"77557c2-31b4"}).explain("executionStats"); 对于查询而言,因为覆盖查询不需要读取文档,而是直接从索引中返回结果,这样的查询性能好,所以尽可能使用索引覆盖查询。如果explain()的输出显示indexOnly字段为真,则说明这个查询就被一个索引覆盖。 执行计划解析: 看执行时间:executionStats.executionStages.executionTimeMillisEstimate和executionStats.executionStages.inputStage. executionTimeMillisEstimate时间越短越好。 executionStats.executionTimeMillis表示执行计划选择和执行的所有时间。 executionStats.executionStages.executionTimeMillisEstimate表示执行计划的执行完成时间。 executionStats.executionStages.inputStage. executionTimeMillisEstimate表示执行计划下的子阶段执行完成时间。 看扫描条数:三个条目数相同为最佳。 executionStats. nReturned表示匹配查询条件的文档数。 executionStats .totalKeysExamined表示索引扫描条目数。 executionStats .totalDocsExamined表示文档扫描条目数。 看Stage状态,性能较好的Stage状态组合如下。 Fetch+IDHACK Fetch+ixscan Limit+(Fetch+ixscan) PROJECTION+ixscan 表1 状态说明 状态名称 描述 COLLSCAN 全表扫描 SORT 内存中进行排序 IDHACK 根据_id进行查询 TEXT 全文索引 COUNTSCAN 未用索引计数 FETCH 索引扫描 LIMIT 使用Limit限制返回数 SUBPLA 未用索引的$or查询阶段 PROJECTION 限定返回字段时stage的返回 COUNT_SCAN 使用索引计数