{"id":8065,"date":"2020-01-20T22:29:32","date_gmt":"2020-01-21T06:29:32","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8065"},"modified":"2025-06-13T17:21:51","modified_gmt":"2025-06-14T00:21:51","slug":"couchbase-6-5-rms-for-indexing-service","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/","title":{"rendered":"Couchbase 6.5 &#8211; RMS for Indexing Service"},"content":{"rendered":"<p><span style=\"font-weight: 400\">Couchbase 6.5 release includes an extensive list of Enterprise Grade Database Query capability that allows customers to expand the adoption of NoSQL database into traditional database applications. The release has added transactional capability, Analytical Window functions, user defined JS functions, as well as Index Advisor to improve query performance.\u00a0 As performance is one of the most important aspects of the Couchbase platform, the new release also includes a set of new enhancements to further strengthen the Couchbase Index Service and improve operational efficiency. These features are grouped together under the general heading of Reliability, Manageability, and Serviceability &#8211; Index Service RMS.<\/span><\/p>\n<h4><span style=\"font-weight: 400\">1. ALTER INDEX to change index replica count<\/span><\/h4>\n<p><span style=\"font-weight: 400\">In 6.5.0, we have added the much asked-for support for changing the number of replicas for an index using the ALTER INDEX command. The replica count can be changed using ALTER command as in below example &#8211;<\/span><\/p>\n<pre class=\"lang:default decode:true\">ALTER INDEX `travel-sample`.airlines_idx WITH {\"action\":\"replica_count\",\"num_replica\": 3}'\r\n<\/pre>\n<p><span style=\"font-weight: 400\"><em><strong>action<\/strong><\/em> for ALTER INDEX is <\/span><b>replica_count<\/b><span style=\"font-weight: 400\"> and the parameter <\/span><b>num_replica<\/b><span style=\"font-weight: 400\"> specifies the new number of replicas for the index. If num_replica value in the ALTER statement is greater than the current count of replicas, additional replicas are created; if it is lesser than current replica count, replicas are removed.\u00a0<\/span><\/p>\n<h4><span style=\"font-weight: 400\">2. ALTER INDEX to drop an index replica<\/span><\/h4>\n<p><span style=\"font-weight: 400\">ALTER INDEX command has further been enhanced to drop an individual index replica using syntax as below:<\/span><\/p>\n<pre class=\"lang:default decode:true \">ALTER INDEX `travel-sample`.airlines_idx WITH {\"action\":\"drop_replica\",\"replicaId\": 2}'<\/pre>\n<p><span style=\"font-weight: 400\"><em><strong>action<\/strong><\/em> is <\/span><b>drop_index<\/b><span style=\"font-weight: 400\"> and <\/span><b>replicaId<\/b><span style=\"font-weight: 400\"> is the ID of the replica which is a number identifying a replica. The replicaId of a replica and host it resides in can be obtained from REST API getIndexStatus.<\/span><\/p>\n<p><span style=\"font-weight: 400\">What are the benefits: Better manageability of index replicas &#8211; easier way to increase\/decrease replica count or drop a specific index replica. Find more information at:<\/span><\/p>\n<p><a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/n1ql\/n1ql-language-reference\/alterindex.html\"><span style=\"font-weight: 400\">https:\/\/docs.couchbase.com\/server\/6.5\/n1ql\/n1ql-language-reference\/alterindex.html<\/span><\/a><\/p>\n<h4><span style=\"font-weight: 400\">3. Improve DCP Rollback handling<\/span><\/h4>\n<p>DCP rollback happens in the index service when one of the data node gets failed over, and a data replica gets promoted to active. Not every failover leads to rollback. This situation only happens when the index service has more data\/recent vbuuid than the data replica before failover. If the data replica becomes active after a failover, the index service will receive a rollback. Please refer to the <a href=\"https:\/\/github.com\/couchbase\/kv_engine\/blob\/master\/docs\/dcp\/documentation\/rollback.md#3-diverging-history\"><span style=\"font-weight: 400\">DCP documentation<\/span><\/a> for more details. In worst case scenario, DCP could ask index service to rollback to 0.<\/p>\n<p>With this enhancement, DCP rollback handling for the index service has been made more robust.<br \/>\nWhen the index service receives a DCP rollback to 0, it will try to revert to its most current index snapshots, instead of rebuilding the entire index.<\/p>\n<p><span style=\"font-weight: 400\">What are the benefits:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Index service will no longer need to rebuild its indexes from scratch when the data node is auto failover.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Index service will continue servicing the query clients without any interruption using its most current snapshot.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Since index disk snapshots are taken once every 10mins, it could therefore be serving up stale data during the period that index is catching up with data service. If scan_consistency is set to request_plus, then scans will wait until a consistent snapshot is created and stale results will not be returned.<\/span><\/li>\n<\/ul>\n<h4><span style=\"font-weight: 400\">4. Optimize in-memory snapshotting<\/span><\/h4>\n<p><span style=\"font-weight: 400\">Couchbase server is designed to be eventually consistent. However application can alter this behavior by requesting for index service to include all updated documents in its indexes before processing the query, via the request_plus query consistency setting. The response time for the query is expected to have some delay as the service needs to ensure that the indexes are updated before processing the query. The frequency of generating in-memory snapshots for indexes has been increased to every 10ms to speed-up request_plus queries.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">What are the benefits:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">In Couchbase 6.5, we have optimized this process by speeding up the index in-memory snapshotting. Application queries, using this setting (request_plus) , can now see the response time reduced by over 45%.<\/span><\/li>\n<\/ul>\n<h4><span style=\"font-weight: 400\">5. Improvements to projector memory usage<\/span><\/h4>\n<p><span style=\"font-weight: 400\">Projector is a process that resides in the data node that processes incoming mutations on behalf of the index service. Projector ensures that only mutations that involve the document fields, which are part of any indexes, are sent over to the Index Service. Projector memory usage can be negatively impacted with high mutation rates, large document size, slower downstream. This enhancement involves reconfiguring the various settings in the projector internals to ensure the process memory usage is kept at an optimal level.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">What are the benefits:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Performance test cases show that the peak-projector RSS(Memory Use) has decreased from 1.5GB to 176MB (for a specific workload) without affecting the index build time.<\/span><\/li>\n<\/ul>\n<h4><span style=\"font-weight: 400\">6. Improve projector response time to indexer<\/span><\/h4>\n<p><span style=\"font-weight: 400\">Under heavy load, the projector process can become slow in responding to the indexing service, which was due to the slow communication control messages on the projector channel. An optimization has been introduced to separate out Control and Data channels in projector and also to prioritize control messages over data.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">What are the benefits:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Under memory pressure, projector continues to respond to control messages from indexer and we can see a reduction in rebalance failures.\u00a0<\/span><\/li>\n<\/ul>\n<h4><span style=\"font-weight: 400\">7. Build all unbuilt indexes at once<\/span><\/h4>\n<p><span style=\"font-weight: 400\">The\u00a0 N1QL command to BUILD index currently takes a single or a list of index names. This command has been enhanced to take the result of a query, thus allowing Administrators to submit a single command to build all unbuilt indexes. This is particularly useful after a database restore, and the Administrator needs to rebuild all indexes that are in deferred state.<\/span><\/p>\n<pre class=\"lang:default decode:true\">BUILD INDEX ON `travel-sample` \r\n  ((SELECT RAW name\r\n      FROM system:indexes\r\n      WHERE keyspace_id = 'travel-sample'\r\n        AND state = 'deferred' \r\n  ));<\/pre>\n<p><span style=\"font-weight: 400\">What are the benefits:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Database administrator can issue a single BUILD command to rebuild all unbuilt (deferred) indexes.<\/span><\/li>\n<\/ul>\n<h4><span style=\"font-weight: 400\">8. Allow scans during indexer warm up<\/span><\/h4>\n<p><span style=\"font-weight: 400\">When indexer restarts, the indexes are recovered from <\/span><span style=\"font-weight: 400\">persisted<\/span><span style=\"font-weight: 400\"> storage. If the number of indexes per node is high, this can take a long time (up to a few minutes). Before this improvement, scans were disabled during indexer warm up. We have improved this behavior to allow scans for those indexes that are warmed up and have a consistent snapshot available. If a consistent snapshot is not available during warm up (this happens when Data service has moved ahead), then an error is returned so that a replica index on another indexer node can be retried.<\/span><\/p>\n<p><span style=\"font-weight: 400\">What are the benefits:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">This improvement allows better application continuity and service availability in the case of indexer process restarts.\u00a0<\/span><\/li>\n<\/ul>\n<h4><span style=\"font-weight: 400\">9. Apply settings change dynamically without indexer restarts<\/span><\/h4>\n<p><span style=\"font-weight: 400\">Before this improvement, changing settings that allow\/disallow large keys, control the size of indexed keys and corresponding runtime buffers needed to process index keys required restart of indexer process, causing cluster-wide indexers restart leading to unavailability of service. We have improved the behavior to ensure these sizes apply dynamically and all buffers resize dynamically without affecting processing of mutations.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">What are the benefits: Following settings can now be dynamically changed without causing indexer process restart: max_seckey_size, max_array_seckey_size and allow_large_keys.<\/span><\/p>\n<p><span style=\"font-weight: 400\">There is no configuration change needed to enable this improvement. This allows application continuity and service availability when above settings are modified.\u00a0<\/span><\/p>\n<h4><span style=\"font-weight: 400\">10. Find unused indexes<\/span><\/h4>\n<p><span style=\"font-weight: 400\">In large applications using database, there can be many indexes created but it is possible that not all are in use in recent past or not used at all. To help make it easier to identify which indexes are not used so that they can be dropped, we now provide a stat for each index that has timestamp of last known query time of that index as Unix timestamp (which is in nanoseconds). This stat does not reset upon indexer restart as it gets persisted locally on the indexer node. This stat is a heuristic to get an estimated last query time and cannot be exact as the persistence interval of the stat is 15 minutes. It can be fetched using stats REST API of the indexer, and it is also available in the index definition UI.<\/span><\/p>\n<pre class=\"lang:default decode:true\">curl -u &lt;username&gt;:&lt;password&gt; &lt;hostname&gt;:9102\/api\/v1\/stats | json_pp | grep last_known_scan_time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\"travel-sample:airlines_idx:last_known_scan_time\" : 1579179249769780000,<\/pre>\n<p><span style=\"font-weight: 400\">You can also use N1QL to query for the unused indexes\u00a0<\/span><\/p>\n<pre class=\"lang:default decode:true\">SELECT  \r\n ARRAY { \"index_name\":a.name,\r\n         \"last_scan_time\":millis_to_str(a.val.last_known_scan_time\/1000000) } \r\n         FOR a IN OBJECT_PAIRS(results) END\r\nFROM curl(\"https:\/\/&lt;hostname&gt;:9102\/api\/v1\/stats\", {\"user\":\"&lt;username&gt;:&lt;password&gt;\"}) results\r\n<\/pre>\n<h4><span style=\"font-weight: 400\">11. Stats improvements\u00a0<\/span><\/h4>\n<p><span style=\"font-weight: 400\">New stats have been added to Periodic stats logging in indexer and as well as in projector. These stats are:<br \/>\n<\/span><\/p>\n<div class=\"responsive-table\">\n<table>\n<tbody>\n<tr>\n<td><b>stats<\/b><\/td>\n<td><b>Description<\/b><\/td>\n<td><b>Available on supported REST Endpoint<\/b><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">num_scan_timeouts<\/span><\/i><\/td>\n<td><span style=\"font-weight: 400\">Number of scan requests that timed out either waiting for a snapshot or during scan in progress.<\/span><\/td>\n<td><span style=\"font-weight: 400\">Yes<\/span><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">num_scan_errors<\/span><\/i><\/td>\n<td><span style=\"font-weight: 400\">Number of scan requests that failed due to any error other than timeout.<\/span><\/td>\n<td><span style=\"font-weight: 400\">Yes<\/span><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">avg_scan_latency<\/span><\/i><\/td>\n<td><span style=\"font-weight: 400\">Running average of scan latencies observed for a given index<\/span><\/td>\n<td><span style=\"font-weight: 400\">No<\/span><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">last_known_scan_time<\/span><\/i><span style=\"font-weight: 400\">\u00a0<\/span><\/td>\n<td><span style=\"font-weight: 400\">An int64 Unix timestamp representing the last known time of an index.<\/span><\/td>\n<td><span style=\"font-weight: 400\">Yes<\/span><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">key_size_distribution<\/span><\/i><\/td>\n<td><span style=\"font-weight: 400\">A distribution of key sizes in various size buckets<\/span><\/td>\n<td><span style=\"font-weight: 400\">No<\/span><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">arrkey_size_distribution<\/span><\/i><\/td>\n<td><span style=\"font-weight: 400\">key_size_distribution &#8211; A distribution of key sizes in various size buckets<\/span><\/td>\n<td><span style=\"font-weight: 400\">No<\/span><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">num_items_flushed<\/span><\/i><\/td>\n<td><span style=\"font-weight: 400\">Number of index keys written to the index storage.<\/span><\/td>\n<td><span style=\"font-weight: 400\">Yes<\/span><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">initial_build_progress<\/span><\/i><span style=\"font-weight: 400\">\u00a0<\/span><\/td>\n<td><span style=\"font-weight: 400\">Progress of initial build of an index in percentage<\/span><\/td>\n<td><span style=\"font-weight: 400\">Yes<\/span><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">avg_drain_rate<\/span><\/i><\/td>\n<td><span style=\"font-weight: 400\">A running average of number of items flushed to index storage\u00a0<\/span><\/td>\n<td><span style=\"font-weight: 400\">Yes<\/span><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">num_pending_requests<\/span><\/i><\/td>\n<td><span style=\"font-weight: 400\">Number of scan requests that are currently outstanding or ongoing.<\/span><\/td>\n<td><span style=\"font-weight: 400\">Yes<\/span><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">memory_total_storage<\/span><\/i><\/td>\n<td><i><span style=\"font-weight: 400\">memory_total_storage <\/span><\/i><span style=\"font-weight: 400\">&#8211; Size of the total jemalloc usage by the index storage.<\/span><\/td>\n<td><span style=\"font-weight: 400\">Yes<\/span><\/td>\n<\/tr>\n<tr>\n<td><i><span style=\"font-weight: 400\">projector_latency<\/span><\/i><\/td>\n<td><span style=\"font-weight: 400\">This stat measures a running average latency of mutation processing at projector i.e. the time mutation arrives from data node to the time it is pushed to indexer node by the projector. It is maintained per data node at the indexer. This helps in identifying which projector (in a data node) is taking more time to process mutations.<\/span><\/td>\n<td><span style=\"font-weight: 400\">No<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h4><span style=\"font-weight: 400\">12. Index UI improvements<\/span><\/h4>\n<p><span style=\"font-weight: 400\">Index UI in v6.5 has been improved to include important summary information about the index such as requests\/sec, resident ratio, items, data size, status. Expanding upon an individual index shows the index definition and, in case of a partitioned index, their nodes and partitions information.\u00a0<\/span><\/p>\n<h5>Index Summary<\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-8066\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-20-at-9.27.13-AM.png\" alt=\"\" width=\"1878\" height=\"514\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.27.13-AM.png 1878w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.27.13-AM-300x82.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.27.13-AM-1024x280.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.27.13-AM-768x210.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.27.13-AM-1536x420.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.27.13-AM-20x5.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.27.13-AM-1320x361.png 1320w\" sizes=\"auto, (max-width: 1878px) 100vw, 1878px\" \/><\/p>\n<h5><span style=\"font-weight: 400\">Index Stats<\/span><\/h5>\n<p><span style=\"font-weight: 400\">A significant new addition to Index UI is the Index Stats for each index which displays a graphical view of key stats like Resident Percent, Data Size, Disk Size, Index Fragmentation, Drain Rate among others. A complete summary stats of the entire index service service (across all indexes) is displayed at the bottom of the page capturing information like Index Service RAM Quota, RAM Used\/Remaining, Index Service RAM Percent, Total Scan Rate and Indexes Fragmentation. These improvements to Index UI help in easier monitoring of the indexes with the most important stats readily available.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-8067\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-20-at-9.28.47-AM.png\" alt=\"\" width=\"1852\" height=\"962\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.28.47-AM.png 1852w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.28.47-AM-300x156.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.28.47-AM-1024x532.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.28.47-AM-768x399.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.28.47-AM-1536x798.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.28.47-AM-20x10.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.28.47-AM-1320x686.png 1320w\" sizes=\"auto, (max-width: 1852px) 100vw, 1852px\" \/><\/p>\n<h5><span style=\"font-weight: 400\">Index service summary at the bottom of the page<\/span><\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-8068\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-20-at-9.29.57-AM.png\" alt=\"\" width=\"1902\" height=\"160\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.29.57-AM.png 1902w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.29.57-AM-300x25.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.29.57-AM-1024x86.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.29.57-AM-768x65.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.29.57-AM-1536x129.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.29.57-AM-20x2.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.29.57-AM-1320x111.png 1320w\" sizes=\"auto, (max-width: 1902px) 100vw, 1902px\" \/><\/p>\n<h3>Summary<\/h3>\n<p>We are very excited about the new Index service (GSI) RMS enhancements for Couchbase v6.5, as these features will address many requests that our customers have asked for. As usual we are looking forwards to getting feedback for these enhancements,<\/p>\n<div class=\"entry-content\">\n<h4><b>Resources<\/b><\/h4>\n<ul>\n<li><i>Download<\/i>:\u00a0<a href=\"https:\/\/couchbase.com\/downloads?family=server&amp;product=couchbase-server-developer\">Download Couchbase Server 6.5<\/a><\/li>\n<li><i>Documentation<\/i>:\u00a0<a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/introduction\/whats-new.html\">Couchbase Server 6.5 What\u2019s New<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/tag\/6-5\/\"><b>All 6.5 Blogs<\/b><\/a><\/li>\n<\/ul>\n<p>We would love to hear from you on how you liked the 6.5 features and how it\u2019ll benefit your business going forward. Please share your feedback via the comments or in the\u00a0<a href=\"https:\/\/www.couchbase.com\/forums\/\">forum<\/a>.<\/p>\n<\/div>\n<p><strong>Co-author: Prathibha Bisarahalli | Senior Software Engineer<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Couchbase 6.5 release includes an extensive list of Enterprise Grade Database Query capability that allows customers to expand the adoption of NoSQL database into traditional database applications. The release has added transactional capability, Analytical Window functions, user defined JS functions, [&hellip;]<\/p>\n","protected":false},"author":26326,"featured_media":8069,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,2453,1812],"tags":[2378,1695,1505],"ppma_author":[8919],"class_list":["post-8065","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-global-secondary-index","category-n1ql-query","tag-6-5","tag-gsi","tag-index"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Couchbase 6.5 - RMS for Indexing Service - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase 6.5 - RMS for Indexing Service\" \/>\n<meta property=\"og:description\" content=\"Couchbase 6.5 release includes an extensive list of Enterprise Grade Database Query capability that allows customers to expand the adoption of NoSQL database into traditional database applications. The release has added transactional capability, Analytical Window functions, user defined JS functions, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-21T06:29:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T00:21:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.30.39-AM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1886\" \/>\n\t<meta property=\"og:image:height\" content=\"436\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Binh Le\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Binh Le\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/\"},\"author\":{\"name\":\"Binh Le\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63\"},\"headline\":\"Couchbase 6.5 &#8211; RMS for Indexing Service\",\"datePublished\":\"2020-01-21T06:29:32+00:00\",\"dateModified\":\"2025-06-14T00:21:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/\"},\"wordCount\":1830,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.30.39-AM.png\",\"keywords\":[\"6.5\",\"GSI\",\"Index\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Global Secondary Index\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/\",\"name\":\"Couchbase 6.5 - RMS for Indexing Service - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.30.39-AM.png\",\"datePublished\":\"2020-01-21T06:29:32+00:00\",\"dateModified\":\"2025-06-14T00:21:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.30.39-AM.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.30.39-AM.png\",\"width\":1886,\"height\":436},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase 6.5 &#8211; RMS for Indexing Service\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63\",\"name\":\"Binh Le\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"caption\":\"Binh Le\"},\"description\":\"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Cloud Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/binh-le-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase 6.5 - RMS for Indexing Service - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/","og_locale":"en_US","og_type":"article","og_title":"Couchbase 6.5 - RMS for Indexing Service","og_description":"Couchbase 6.5 release includes an extensive list of Enterprise Grade Database Query capability that allows customers to expand the adoption of NoSQL database into traditional database applications. The release has added transactional capability, Analytical Window functions, user defined JS functions, [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-01-21T06:29:32+00:00","article_modified_time":"2025-06-14T00:21:51+00:00","og_image":[{"width":1886,"height":436,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.30.39-AM.png","type":"image\/png"}],"author":"Binh Le","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Binh Le","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/"},"author":{"name":"Binh Le","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63"},"headline":"Couchbase 6.5 &#8211; RMS for Indexing Service","datePublished":"2020-01-21T06:29:32+00:00","dateModified":"2025-06-14T00:21:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/"},"wordCount":1830,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.30.39-AM.png","keywords":["6.5","GSI","Index"],"articleSection":["Best Practices and Tutorials","Global Secondary Index","SQL++ \/ N1QL Query"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/","name":"Couchbase 6.5 - RMS for Indexing Service - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.30.39-AM.png","datePublished":"2020-01-21T06:29:32+00:00","dateModified":"2025-06-14T00:21:51+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.30.39-AM.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Screen-Shot-2020-01-20-at-9.30.39-AM.png","width":1886,"height":436},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-6-5-rms-for-indexing-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase 6.5 &#8211; RMS for Indexing Service"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63","name":"Binh Le","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7","url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","caption":"Binh Le"},"description":"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Cloud Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK.","url":"https:\/\/www.couchbase.com\/blog\/author\/binh-le-2\/"}]}},"authors":[{"term_id":8919,"user_id":26326,"is_guest":0,"slug":"binh-le-2","display_name":"Binh Le","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","author_category":"","last_name":"Le","first_name":"Binh","job_title":"","user_url":"","description":"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Clould Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/8065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/26326"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=8065"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/8065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/8069"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=8065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=8065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=8065"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=8065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}