{"id":2694,"date":"2017-02-20T11:07:56","date_gmt":"2017-02-20T19:07:56","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2694"},"modified":"2025-06-13T19:29:21","modified_gmt":"2025-06-14T02:29:21","slug":"new-profiling-monitoring-couchbase-server-4-6","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/new-profiling-monitoring-couchbase-server-4-6\/","title":{"rendered":"Nuevos perfiles y monitorizaci\u00f3n en la versi\u00f3n preliminar de Couchbase Server 5.0"},"content":{"rendered":"<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>La monitorizaci\u00f3n de consultas N1QL y las actualizaciones de perfiles son s\u00f3lo algunas de las bondades que puedes encontrar en la versi\u00f3n preliminar para desarrolladores de febrero de Couchbase Server 5.0.0.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Vaya a <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">descargue la versi\u00f3n para desarrolladores 5.0.0 de febrero de Couchbase Server<\/a> hoy, haz clic en la pesta\u00f1a \"Desarrollador\" y compru\u00e9balo. A\u00fan tienes tiempo de hacernos llegar tus comentarios antes del lanzamiento oficial.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Como siempre, ten en cuenta que estoy escribiendo esta entrada del blog en las primeras versiones, y algunas cosas pueden cambiar en menor medida en el momento en que se obtiene la versi\u00f3n.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_what_is_profiling_and_monitoring_for\">\u00bfPara qu\u00e9 sirve la elaboraci\u00f3n de perfiles y la supervisi\u00f3n?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Cuando escribo consultas N1QL, necesito ser capaz de entender lo bien (o lo mal) que mi consulta (y mi cl\u00faster) est\u00e1 funcionando con el fin de hacer mejoras y diagnosticar problemas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Con esta \u00faltima versi\u00f3n para desarrolladores de Couchbase Server 5.0, se han a\u00f1adido algunas herramientas nuevas a tu caja de herramientas de escritura N1QL.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_n1ql_writing_review\">Revisi\u00f3n de la redacci\u00f3n de N1QL<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Primero, un repaso.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Existen m\u00faltiples formas para que un desarrollador ejecute consultas N1QL.<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Utiliza el <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/sdk\/dotnet\/n1ql-queries-with-sdk.html\">SDK de su elecci\u00f3n<\/a>.<\/li>\n<li>Utiliza el <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/cli\/cbq-tool.html\">herramienta de l\u00ednea de comandos cbq<\/a>.<\/li>\n<li>Utiliza el <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/tools\/query-workbench.html\">Workbench de consulta<\/a> en la consola web de Couchbase<\/li>\n<li>Utiliza el <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-rest-api\/index.html\">Puntos finales N1QL de la API REST<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>En este post, utilizar\u00e9 principalmente Query Workbench.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Hay dos <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/tools\/query-monitoring.html\">cat\u00e1logos de sistemas<\/a> que ya est\u00e1n disponibles en Couchbase Server 4.5 y de las que hablar\u00e9 hoy.<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><strong>sistema:solicitud_activa<\/strong> - Este cat\u00e1logo enumera todas las peticiones o consultas activas actualmente en ejecuci\u00f3n. Puede ejecutar la consulta N1QL <code>SELECT * FROM sistema:solicitudes_activas;<\/code> y listar\u00e1 todos esos resultados.<\/li>\n<li><strong>sistema:solicitudes_realizadas<\/strong> - Este cat\u00e1logo enumera todas las solicitudes completadas recientemente (que se han ejecutado durante m\u00e1s tiempo que alg\u00fan umbral de tiempo, por defecto 1 segundo). Puede ejecutar <code>SELECT * FROM sistema:solicitudes_realizadas;<\/code> y se listar\u00e1n estas consultas.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_new_to_n1ql_meta_plan\">Nuevo en N1QL: META().plan<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Ambos <code>solicitudes_activas<\/code> y <code>solicitudes_realizadas<\/code> devuelven no s\u00f3lo el texto original de la consulta N1QL, sino tambi\u00e9n informaci\u00f3n relacionada: tiempo de solicitud, id de solicitud, tiempo de ejecuci\u00f3n, consistencia del escaneo, etc. Esta informaci\u00f3n puede ser muy \u00fatil. He aqu\u00ed un ejemplo de una consulta simple (<code>select * from `travel-sample`<\/code>) mientras se ejecuta <code>select * from sistema:solicitudes_activas;<\/code><\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-JavaScript\">{\r\n\t\"active_requests\": {\r\n\t  \"clientContextID\": \"805f519d-0ffb-4adf-bd19-15238c95900a\",\r\n\t  \"elapsedTime\": \"645.4333ms\",\r\n\t  \"executionTime\": \"645.4333ms\",\r\n\t  \"node\": \"10.0.75.1\",\r\n\t  \"phaseCounts\": {\r\n\t\t\"fetch\": 6672,\r\n\t\t\"primaryScan\": 7171\r\n\t  },\r\n\t  \"phaseOperators\": {\r\n\t\t\"fetch\": 1,\r\n\t\t\"primaryScan\": 1\r\n\t  },\r\n\t  \"phaseTimes\": {\r\n\t\t\"authorize\": \"500.3\u00b5s\",\r\n\t\t\"fetch\": \"365.7758ms\",\r\n\t\t\"parse\": \"500\u00b5s\",\r\n\t\t\"primaryScan\": \"107.3891ms\"\r\n\t  },\r\n\t  \"requestId\": \"80787238-f4cb-4d2d-999f-7faff9b081e4\",\r\n\t  \"requestTime\": \"2017-02-10 09:06:18.3526802 -0500 EST\",\r\n\t  \"scanConsistency\": \"unbounded\",\r\n\t  \"state\": \"running\",\r\n\t  \"statement\": \"select * from `travel-sample`;\"\r\n\t}\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>En primer lugar, quiero se\u00f1alar que <strong>phaseTimes<\/strong> es una nueva adici\u00f3n a los resultados. Es una forma r\u00e1pida y sucia de hacerse una idea del coste de la consulta sin mirar el perfil completo. Le da el coste global de cada fase de la consulta sin entrar en el detalle de cada operador. En el ejemplo anterior, por ejemplo, se puede ver que <code>analizar<\/code> tard\u00f3 500\u00b5s y <code>primaryScan<\/code> tard\u00f3 107,3891 ms. Esto puede ser suficiente informaci\u00f3n para que usted pueda seguir sin bucear en <code>META().plan<\/code>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Sin embargo, con el nuevo <code>META().plan<\/code>puedes obtener informaci\u00f3n muy detallada sobre el plan de consulta. Esta vez, ejecutar\u00e9 <code>SELECT *, META().plan FROM system:active_requests<\/code>;<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-JavaScript\">[\r\n  {\r\n    \"active_requests\": {\r\n      \"clientContextID\": \"75f0f401-6e87-48ae-bca8-d7f39a6d029f\",\r\n      \"elapsedTime\": \"1.4232754s\",\r\n      \"executionTime\": \"1.4232754s\",\r\n      \"node\": \"10.0.75.1\",\r\n      \"phaseCounts\": {\r\n        \"fetch\": 12816,\r\n        \"primaryScan\": 13231\r\n      },\r\n      \"phaseOperators\": {\r\n        \"fetch\": 1,\r\n        \"primaryScan\": 1\r\n      },\r\n      \"phaseTimes\": {\r\n        \"authorize\": \"998.7\u00b5s\",\r\n        \"fetch\": \"620.704ms\",\r\n        \"primaryScan\": \"48.0042ms\"\r\n      },\r\n      \"requestId\": \"42f50724-6893-479a-bac0-98ebb1595380\",\r\n      \"requestTime\": \"2017-02-15 14:44:23.8560282 -0500 EST\",\r\n      \"scanConsistency\": \"unbounded\",\r\n      \"state\": \"running\",\r\n      \"statement\": \"select * from `travel-sample`;\"\r\n    },\r\n    \"plan\": {\r\n      \"#operator\": \"Sequence\",\r\n      \"#stats\": {\r\n        \"#phaseSwitches\": 1,\r\n        \"kernTime\": \"1.4232754s\",\r\n        \"state\": \"kernel\"\r\n      },\r\n      \"~children\": [\r\n        {\r\n          \"#operator\": \"Authorize\",\r\n          \"#stats\": {\r\n            \"#phaseSwitches\": 3,\r\n            \"kernTime\": \"1.4222767s\",\r\n            \"servTime\": \"998.7\u00b5s\",\r\n            \"state\": \"kernel\"\r\n          },\r\n          \"privileges\": {\r\n            \"default:travel-sample\": 1\r\n          },\r\n          \"~child\": {\r\n            \"#operator\": \"Sequence\",\r\n            \"#stats\": {\r\n              \"#phaseSwitches\": 1,\r\n              \"kernTime\": \"1.4222767s\",\r\n              \"state\": \"kernel\"\r\n            },\r\n            \"~children\": [\r\n              {\r\n                \"#operator\": \"PrimaryScan\",\r\n                \"#stats\": {\r\n                  \"#itemsOut\": 13329,\r\n                  \"#phaseSwitches\": 53319,\r\n                  \"execTime\": \"26.0024ms\",\r\n                  \"kernTime\": \"1.3742725s\",\r\n                  \"servTime\": \"22.0018ms\",\r\n                  \"state\": \"kernel\"\r\n                },\r\n                \"index\": \"def_primary\",\r\n                \"keyspace\": \"travel-sample\",\r\n                \"namespace\": \"default\",\r\n                \"using\": \"gsi\"\r\n              },\r\n              {\r\n                \"#operator\": \"Fetch\",\r\n                \"#stats\": {\r\n                  \"#itemsIn\": 12817,\r\n                  \"#itemsOut\": 12304,\r\n                  \"#phaseSwitches\": 50293,\r\n                  \"execTime\": \"18.5117ms\",\r\n                  \"kernTime\": \"787.9722ms\",\r\n                  \"servTime\": \"615.7928ms\",\r\n                  \"state\": \"services\"\r\n                },\r\n                \"keyspace\": \"travel-sample\",\r\n                \"namespace\": \"default\"\r\n              },\r\n              {\r\n                \"#operator\": \"Sequence\",\r\n                \"#stats\": {\r\n                  \"#phaseSwitches\": 1,\r\n                  \"kernTime\": \"1.4222767s\",\r\n                  \"state\": \"kernel\"\r\n                },\r\n                \"~children\": [\r\n                  {\r\n                    \"#operator\": \"InitialProject\",\r\n                    \"#stats\": {\r\n                      \"#itemsIn\": 11849,\r\n                      \"#itemsOut\": 11848,\r\n                      \"#phaseSwitches\": 47395,\r\n                      \"execTime\": \"5.4964ms\",\r\n                      \"kernTime\": \"1.4167803s\",\r\n                      \"state\": \"kernel\"\r\n                    },\r\n                    \"result_terms\": [\r\n                      {\r\n                        \"expr\": \"self\",\r\n                        \"star\": true\r\n                      }\r\n                    ]\r\n                  },\r\n                  {\r\n                    \"#operator\": \"FinalProject\",\r\n                    \"#stats\": {\r\n                      \"#itemsIn\": 11336,\r\n                      \"#itemsOut\": 11335,\r\n                      \"#phaseSwitches\": 45343,\r\n                      \"execTime\": \"6.5002ms\",\r\n                      \"kernTime\": \"1.4157765s\",\r\n                      \"state\": \"kernel\"\r\n                    }\r\n                  }\r\n                ]\r\n              }\r\n            ]\r\n          }\r\n        },\r\n        {\r\n          \"#operator\": \"Stream\",\r\n          \"#stats\": {\r\n            \"#itemsIn\": 10824,\r\n            \"#itemsOut\": 10823,\r\n            \"#phaseSwitches\": 21649,\r\n            \"kernTime\": \"1.4232754s\",\r\n            \"state\": \"kernel\"\r\n          }\r\n        }\r\n      ]\r\n    }\r\n  }, ...\r\n]<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>La salida anterior procede del Query Workbench.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Observe la nueva parte \"plan\". Contiene un \u00e1rbol de operadores que se combinan para ejecutar la consulta N1QL. El operador ra\u00edz es una Secuencia, que a su vez tiene una colecci\u00f3n de operadores hijos como Authorize, PrimaryScan, Fetch, y posiblemente a\u00fan m\u00e1s Secuencias.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_enabling_the_profile_feature\">Activar la funci\u00f3n de perfil<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Para obtener esta informaci\u00f3n al utilizar cbq o la API REST, tendr\u00e1s que activar la funci\u00f3n \"perfil\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Puede hacerlo en <code>cbq<\/code> introduciendo <code>set -perfil timings;<\/code> y, a continuaci\u00f3n, ejecute su consulta.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tambi\u00e9n puede hacerlo con la API REST por cada solicitud (utilizando la funci\u00f3n <code>\/consulta\/servicio<\/code> y pasando un par\u00e1metro querystring de <code>perfil=tiempos<\/code>por ejemplo).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Puedes activar la configuraci\u00f3n para todo el nodo haciendo una petici\u00f3n POST a https:\/\/localhost:8093\/admin\/settings, usando autenticaci\u00f3n Basic, y un cuerpo JSON como:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-JavaScript\">{\r\n  \"completed-limit\": 4000,\r\n  \"completed-threshold\": 1000,\r\n  \"controls\": false,\r\n  \"cpuprofile\": \"\",\r\n  \"debug\": false,\r\n  \"keep-alive-length\": 16384,\r\n  \"loglevel\": \"INFO\",\r\n  \"max-parallelism\": 1,\r\n  \"memprofile\": \"\",\r\n  \"pipeline-batch\": 16,\r\n  \"pipeline-cap\": 512,\r\n  \"pretty\": true,\r\n  \"profile\": \"timings\",\r\n  \"request-size-cap\": 67108864,\r\n  \"scan-cap\": 0,\r\n  \"servicers\": 32,\r\n  \"timeout\": 0\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>F\u00edjese en el <strong>perfil<\/strong> ajuste. Antes estaba desactivado, pero lo he puesto en \"temporizaci\u00f3n\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Puede que no quieras hacerlo, especialmente en nodos que est\u00e1n siendo utilizados por otras personas y programas, porque afectar\u00e1 a otras consultas que se est\u00e9n ejecutando en el nodo. Es mejor hacerlo por petici\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tambi\u00e9n es lo que hace Query Workbench por defecto.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_using_the_query_workbench\">Utilizaci\u00f3n del Query Workbench<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Hay mucha informaci\u00f3n en <code>META().plan<\/code> sobre c\u00f3mo se ejecuta el plan. Personalmente, prefiero ver una versi\u00f3n gr\u00e1fica simplificada del mismo en Query Workbench haciendo clic en el icono \"Plan\" (que mencion\u00e9 brevemente en un <a href=\"https:\/\/www.couchbase.com\/blog\/es\/a-tour-of-the-new-couchbase-web-console\/\">post anterior sobre la nueva Couchbase Web Console<\/a> UI).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/02\/054_01_Plan_Query_Workbench.jpg\" alt=\"Query Workbench plan results\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Veamos un ejemplo algo m\u00e1s complejo. Para este ejercicio, estoy utilizando el cubo de muestras de viajes, pero he eliminado uno de los \u00edndices (<code>DROP INDEX `travel-sample<\/code>.<code>def_sourceairport<\/code>;`).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, ejecuto una consulta N1QL para encontrar vuelos entre San Francisco y Miami:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-SQL\">SELECT r.id, a.name, s.flight, s.utc, r.sourceairport, r.destinationairport, r.equipment\r\nFROM `travel-sample` r\r\nUNNEST r.schedule s\r\nJOIN `travel-sample` a ON KEYS r.airlineid\r\nWHERE r.sourceairport = 'SFO'\r\nAND r.destinationairport = 'MIA'\r\nAND s.day = 0\r\nORDER BY a.name;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Ejecutar esta consulta (en mi m\u00e1quina local de un solo nodo) tarda unos 10 segundos. Definitivamente no es una cantidad de tiempo aceptable, as\u00ed que echemos un vistazo al plan para ver cu\u00e1l puede ser el problema (lo he dividido en dos l\u00edneas para que las capturas de pantalla quepan en la entrada del blog).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/02\/054_02_Plan_1.jpg\" alt=\"Query Workbench plan part 1\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/02\/054_03_Plan_2.jpg\" alt=\"Query Workbench plan part 2\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si se observa el plan, parece que las partes m\u00e1s costosas de la consulta son las siguientes <strong>Filtro<\/strong> y el <strong>\u00danete a<\/strong>. <code>\u00daNASE A<\/code> funcionan con teclas, por lo que normalmente deber\u00edan ser muy r\u00e1pidas. Pero parece que hay un <em>lote<\/em> de los documentos que se unen.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>El filtro (el <code>DONDE<\/code> parte de la consulta) tambi\u00e9n lleva mucho tiempo. Est\u00e1 mirando el <code>fuenteaeropuerto<\/code> y <code>destinoaeropuerto<\/code> campos. Mirando en otra parte del plan, veo que hay un <strong>PrimaryScan<\/strong>. Esto deber\u00eda ser una se\u00f1al de alarma cuando se intenta escribir consultas de alto rendimiento. PrimaryScan significa que la consulta no ha podido encontrar un \u00edndice distinto del \u00edndice primario. Esto es m\u00e1s o menos el equivalente a un \"escaneo de tabla\" en t\u00e9rminos de bases de datos relacionales. (Puede que quieras eliminar el \u00edndice primario para que estos problemas se solucionen m\u00e1s r\u00e1pidamente, pero ese es un tema para otro momento).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Vamos a a\u00f1adir un \u00edndice en <code>fuenteaeropuerto<\/code> campo y ver si eso ayuda.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-SQL\">CREATE INDEX `def_sourceairport` ON `travel-sample`(`sourceairport`);<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Ahora, ejecutando la misma consulta anterior, obtengo el siguiente plan:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/02\/054_04_Plan_improved_1.jpg\" alt=\"Query Workbench improved plan part 1\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/02\/054_05_Plan_improved_2.jpg\" alt=\"Query Workbench improved plan part 2\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Esta consulta tard\u00f3 ~100ms (en mi m\u00e1quina local de un solo nodo), lo que es mucho m\u00e1s aceptable. El <strong>Filtro<\/strong> y el <strong>\u00danete a<\/strong> siguen ocupando un gran porcentaje del tiempo, pero gracias a la <strong>IndexScan<\/strong> sustituyendo el <strong>PrimaryScan<\/strong>En el caso de los operadores de b\u00fasqueda, son muchos menos los documentos con los que tienen que trabajar. Tal vez la consulta podr\u00eda mejorarse a\u00fan m\u00e1s con un \u00edndice adicional sobre el \u00edndice <code>destinoaeropuerto<\/code> campo.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_beyond_tweaking_queries\">M\u00e1s all\u00e1 del ajuste de las consultas<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>La respuesta a los problemas de rendimiento no siempre est\u00e1 en ajustar las consultas. A veces es necesario a\u00f1adir m\u00e1s nodos al cl\u00faster para solucionar el problema subyacente.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Mira el <code>PrimaryScan<\/code> informaci\u00f3n en <code>META().plan<\/code>. He aqu\u00ed un fragmento:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-JavaScript\">\"~children\": [\r\n  {\r\n    \"#operator\": \"PrimaryScan\",\r\n    \"#stats\": {\r\n      \"#itemsOut\": 13329,\r\n      \"#phaseSwitches\": 53319,\r\n      \"execTime\": \"26.0024ms\",\r\n      \"kernTime\": \"1.3742725s\",\r\n      \"servTime\": \"22.0018ms\",\r\n      \"state\": \"kernel\"\r\n    },\r\n    \"index\": \"def_primary\",\r\n    \"keyspace\": \"travel-sample\",\r\n    \"namespace\": \"default\",\r\n    \"using\": \"gsi\"\r\n  }, ... ]<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>En <code>servTime<\/code> indica cu\u00e1nto tiempo emplea el servicio de consulta en esperar en el almacenamiento de datos Clave\/Valor. Si el valor <code>servTime<\/code> es muy alta, pero hay un n\u00famero peque\u00f1o de documentos siendo procesados, eso indica que el indexador (o el servicio clave\/valor) no puede seguir el ritmo. Tal vez tienen demasiada carga procedente de otro lugar. As\u00ed que esto significa que algo raro se est\u00e1 ejecutando en alg\u00fan otro lugar <strong>o<\/strong> que su cl\u00faster est\u00e1 tratando de manejar demasiada carga. Puede que sea el momento de a\u00f1adir m\u00e1s nodos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Del mismo modo, el <code>kernTime<\/code> es cu\u00e1nto tiempo se pasa esperando en otras rutinas N1QL. Esto podr\u00eda significar que algo m\u00e1s aguas abajo en el plan de consulta tiene un problema, o que el nodo de consulta est\u00e1 saturado de peticiones y est\u00e1 teniendo que esperar mucho.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_we_want_your_feedback\">Queremos conocer su opini\u00f3n.<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>El nuevo <code>META().plan<\/code> y el nuevo Plan UI se combinan en Couchbase Server 5.0 para mejorar el proceso de escritura y perfilado de N1QL.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Permanezca atento a la <a href=\"https:\/\/www.couchbase.com\/blog\/es\/\">Blog de Couchbase<\/a> para m\u00e1s informaci\u00f3n sobre la pr\u00f3xima versi\u00f3n para desarrolladores.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u00bfLe interesa probar algunas de estas nuevas funciones? <a href=\"https:\/\/www.couchbase.com\/blog\/es\/download\/\">Descargar Couchbase Server 5.0<\/a> \u00a1hoy!<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Queremos tu opini\u00f3n Todos los meses se publican versiones para desarrolladores, as\u00ed que tienes la oportunidad de influir en lo que estamos construyendo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Bichos<\/strong>: Si encuentra un error (algo que no funciona o que no funciona como cabr\u00eda esperar), presente un problema en nuestra secci\u00f3n <a href=\"https:\/\/issues.couchbase.com\">Sistema JIRA en issues.couchbase.com<\/a> o env\u00ede una pregunta a <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\">Foros de Couchbase<\/a>. O ponte en contacto conmigo con una descripci\u00f3n del problema. Estar\u00e9 encantado de ayudarte o de enviar el error por ti (mis gestores de Couchbase me chocan los cinco cada vez que env\u00edo un buen error).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Comentarios<\/strong>: D\u00edgame lo que piensa. \u00bfAlgo que no te guste? \u00bfAlgo que te guste mucho? \u00bfFalta algo? Ahora puedes dar tu opini\u00f3n directamente desde la Consola Web de Couchbase. Busca el icono <span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/02\/054_06_feedback_icon.png\" alt=\"feedback icon\" \/><\/span> en la parte inferior derecha de la pantalla.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En algunos casos, puede resultar dif\u00edcil decidir si su comentario es un error o una sugerencia. Usa tu criterio o, de nuevo, no dudes en ponerte en contacto conmigo para pedirme ayuda. Quiero saber de ti. La mejor forma de ponerse en contacto conmigo es <a href=\"https:\/\/twitter.com\/mgroves\">Twitter @mgroves<\/a> o env\u00edeme un correo electr\u00f3nico <a href=\"mailto:matthew.groves@couchbase.com\">matthew.groves@couchbase.com<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>N1QL query monitoring and profiling updates are just some of goodness you can find in February\u2019s developer preview release of Couchbase Server 5.0.0. Go download the February 5.0.0 developer release of Couchbase Server today, click the &#8220;Developer&#8221; tab, and check [&hellip;]<\/p>","protected":false},"author":71,"featured_media":2695,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1812],"tags":[1855,1335,1854],"ppma_author":[8937],"class_list":["post-2694","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-n1ql-query","tag-developer-build","tag-monitoring","tag-profiling"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.5 (Yoast SEO v26.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>New Profiling and Monitoring in Couchbase Server 5.0 Preview<\/title>\n<meta name=\"description\" content=\"I&#039;m going to show you the N1QL query monitoring and profiling tools and some of the new features in this latest developer preview release\" \/>\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\/es\/new-profiling-monitoring-couchbase-server-4-6\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New Profiling and Monitoring in Couchbase Server 5.0 Preview\" \/>\n<meta property=\"og:description\" content=\"I&#039;m going to show you the N1QL query monitoring and profiling tools and some of the new features in this latest developer preview release\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/new-profiling-monitoring-couchbase-server-4-6\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-02-20T19:07:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:29:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/054_monitoring_profiling_health_featured.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"New Profiling and Monitoring in Couchbase Server 5.0 Preview\",\"datePublished\":\"2017-02-20T19:07:56+00:00\",\"dateModified\":\"2025-06-14T02:29:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/\"},\"wordCount\":1431,\"commentCount\":8,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/054_monitoring_profiling_health_featured.jpg\",\"keywords\":[\"Developer Build\",\"monitoring\",\"profiling\"],\"articleSection\":[\"Couchbase Server\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/\",\"name\":\"New Profiling and Monitoring in Couchbase Server 5.0 Preview\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/054_monitoring_profiling_health_featured.jpg\",\"datePublished\":\"2017-02-20T19:07:56+00:00\",\"dateModified\":\"2025-06-14T02:29:21+00:00\",\"description\":\"I'm going to show you the N1QL query monitoring and profiling tools and some of the new features in this latest developer preview release\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/054_monitoring_profiling_health_featured.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/054_monitoring_profiling_health_featured.jpg\",\"width\":960,\"height\":540,\"caption\":\"Monitoring and profiling\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New Profiling and Monitoring in Couchbase Server 5.0 Preview\"}]},{\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Nuevos perfiles y monitorizaci\u00f3n en la versi\u00f3n preliminar de Couchbase Server 5.0","description":"I'm going to show you the N1QL query monitoring and profiling tools and some of the new features in this latest developer preview release","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\/es\/new-profiling-monitoring-couchbase-server-4-6\/","og_locale":"es_MX","og_type":"article","og_title":"New Profiling and Monitoring in Couchbase Server 5.0 Preview","og_description":"I'm going to show you the N1QL query monitoring and profiling tools and some of the new features in this latest developer preview release","og_url":"https:\/\/www.couchbase.com\/blog\/es\/new-profiling-monitoring-couchbase-server-4-6\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-02-20T19:07:56+00:00","article_modified_time":"2025-06-14T02:29:21+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/054_monitoring_profiling_health_featured.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"New Profiling and Monitoring in Couchbase Server 5.0 Preview","datePublished":"2017-02-20T19:07:56+00:00","dateModified":"2025-06-14T02:29:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/"},"wordCount":1431,"commentCount":8,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/054_monitoring_profiling_health_featured.jpg","keywords":["Developer Build","monitoring","profiling"],"articleSection":["Couchbase Server","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/","url":"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/","name":"Nuevos perfiles y monitorizaci\u00f3n en la versi\u00f3n preliminar de Couchbase Server 5.0","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/054_monitoring_profiling_health_featured.jpg","datePublished":"2017-02-20T19:07:56+00:00","dateModified":"2025-06-14T02:29:21+00:00","description":"I'm going to show you the N1QL query monitoring and profiling tools and some of the new features in this latest developer preview release","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/054_monitoring_profiling_health_featured.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/054_monitoring_profiling_health_featured.jpg","width":960,"height":540,"caption":"Monitoring and profiling"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/new-profiling-monitoring-couchbase-server-4-6\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"New Profiling and Monitoring in Couchbase Server 5.0 Preview"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"A Matthew D. Groves le encanta programar.  No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa.  Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa.  Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores.  Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2694","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2694"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2694\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/2695"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2694"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2694"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2694"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2694"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}