Crear y gestionar particiones de instancias

En esta página se describe cómo crear y gestionar particiones de instancias de Spanner.

Crear una partición de instancia

Consola

  1. En la Google Cloud consola, abre la página Spanner.

    Ir a Spanner

  2. Selecciona la instancia en la que quieras añadir particiones de instancia.

  3. En el menú de navegación, selecciona Particiones de instancias.

  4. Haz clic en Crear partición de instancia.

  5. Introduce un ID de partición para identificar de forma permanente la partición de tu instancia. El ID de partición de la instancia también debe ser único en tu proyecto.Google Cloud No podrás cambiar el ID de partición de instancia más adelante.

  6. En la sección Choose a configuration (Elige una configuración), selecciona Regional (Regional) o Multi-region (Multirregional). Si quieres comparar las especificaciones de las regiones, haz clic en Comparar configuraciones regionales.

  7. Seleccione una configuración en el menú desplegable.

  8. En la sección Asignar capacidad de computación, en Unidad, haga clic en una de las siguientes opciones:

    • Unidades de procesamiento para particiones de instancias pequeñas.
    • Nodos para instancias grandes. Un nodo equivale a 1000 unidades de procesamiento.
  9. Introduce un valor para la unidad seleccionada.

    La partición de tu instancia debe tener al menos un nodo o 1000 unidades de procesamiento.

  10. Haz clic en Crear para crear la partición de la instancia.

gcloud

Para crear una partición de instancia, usa gcloud beta spanner instance-partitions create.

gcloud beta spanner instance-partitions create INSTANCE_PARTITION_ID \
  --config=INSTANCE_PARTITION_CONFIG \
  --description="INSTANCE_PARTITION_DESCRIPTION" \
  --instance=INSTANCE_ID \
  [--nodes=NODE_COUNT | --processing-units=PROCESSING_UNIT_COUNT]

Haz los cambios siguientes:

  • INSTANCE_PARTITION_ID: el identificador permanente de la partición de la instancia, que es único en tu Google Cloud proyecto. No podrás cambiar el ID de partición de la instancia más adelante.
  • INSTANCE_PARTITION_CONFIG: el identificador permanente de la configuración de la partición de la instancia, que define la ubicación geográfica de la partición de la instancia y afecta a dónde se almacenan los datos.
  • INSTANCE_PARTITION_DESCRIPTION: el nombre que se mostrará en la partición de la instancia en la Google Cloud consola. El nombre de la partición de instancia debe ser único en tu Google Cloud proyecto.
  • INSTANCE_ID: el identificador permanente de la instancia de Spanner en la que reside esta partición de instancia.
  • NODE_COUNT: la capacidad de computación de la partición de la instancia, expresada como número de nodos. Un nodo equivale a 1000 unidades de procesamiento.
  • PROCESSING_UNIT_COUNT: la capacidad de computación de la instancia, expresada como un número de unidades de procesamiento. Tu partición de instancia debe tener al menos 1000 unidades de procesamiento. Introduce cantidades en múltiplos de 1000 (1000, 2000, 3000, etc.).

Por ejemplo, para crear una partición de instancia europe-partition en eur3 con 5 nodos, ejecuta lo siguiente:

  gcloud beta spanner instance-partitions create europe-partition --config=eur3 \
    --description="europe-partition" --instance=test-instance --nodes=5

Bibliotecas de cliente

C++

Para saber cómo instalar y usar la biblioteca de cliente de Spanner, consulta el artículo Bibliotecas de cliente de Spanner.

void CreateInstancePartition(
    google::cloud::spanner_admin::InstanceAdminClient client,
    std::string const& project_id, std::string const& instance_id,
    std::string const& instance_partition_id) {
  auto project = google::cloud::Project(project_id);
  auto in = google::cloud::spanner::Instance(project_id, instance_id);
  auto config = project.FullName() + "/instanceConfigs/nam3";

  google::spanner::admin::instance::v1::CreateInstancePartitionRequest request;
  request.set_parent(in.FullName());
  request.set_instance_partition_id(instance_partition_id);
  request.mutable_instance_partition()->set_display_name(
      "Test instance partition");
  request.mutable_instance_partition()->set_node_count(1);
  request.mutable_instance_partition()->set_config(config);

  auto instance_partition = client.CreateInstancePartition(request).get();
  if (!instance_partition) throw std::move(instance_partition).status();
  std::cout << "Created instance partition [" << instance_partition_id << "]:\n"
            << instance_partition->DebugString();
}

C#

Para saber cómo instalar y usar la biblioteca de cliente de Spanner, consulta el artículo Bibliotecas de cliente de Spanner.


using Google.Cloud.Spanner.Admin.Instance.V1;
using Google.Cloud.Spanner.Common.V1;
using Google.LongRunning;
using System;

public class CreateInstancePartitionSample
{
    public InstancePartition CreateInstancePartition(string projectId, string instanceId, string instancePartitionId)
    {
        // Create the InstanceAdminClient instance.
        InstanceAdminClient instanceAdminClient = InstanceAdminClient.Create();

        // Initialize request parameters.
        InstancePartition partition = new InstancePartition
        {
            DisplayName = "This is a display name.",
            NodeCount = 1,
            ConfigAsInstanceConfigName = InstanceConfigName.FromProjectInstanceConfig(projectId, "nam3"),
        };
        InstanceName instanceName = InstanceName.FromProjectInstance(projectId, instanceId);

        // Make the CreateInstancePartition request.
        Operation<InstancePartition, CreateInstancePartitionMetadata> response = instanceAdminClient.CreateInstancePartition(instanceName, partition, instancePartitionId);

        Console.WriteLine("Waiting for the operation to finish.");

        // Poll until the returned long-running operation is complete.
        Operation<InstancePartition, CreateInstancePartitionMetadata> completedResponse = response.PollUntilCompleted();

        if (completedResponse.IsFaulted)
        {
            Console.WriteLine($"Error while creating instance partition: {completedResponse.Exception}");
            throw completedResponse.Exception;
        }

        Console.WriteLine($"Instance created successfully.");

        return completedResponse.Result;
    }
}

Go

Para saber cómo instalar y usar la biblioteca de cliente de Spanner, consulta el artículo Bibliotecas de cliente de Spanner.

import (
	"context"
	"fmt"
	"io"

	instance "cloud.google.com/go/spanner/admin/instance/apiv1"
	"cloud.google.com/go/spanner/admin/instance/apiv1/instancepb"
)

// Example of creating an instance partition with Go.
// projectID is the ID of the project that the new instance partition will be in.
// instanceID is the ID of the instance that the new instance partition will be in.
// instancePartitionID is the ID of the new instance partition to be created.
func createInstancePartition(w io.Writer, projectID, instanceID, instancePartitionID string) error {
	// projectID := "my-project-id"
	// instanceID := "my-instance"
	// instancePartitionID := "my-instance-partition"
	ctx := context.Background()
	instanceAdmin, err := instance.NewInstanceAdminClient(ctx)
	if err != nil {
		return err
	}
	defer instanceAdmin.Close()

	op, err := instanceAdmin.CreateInstancePartition(ctx, &instancepb.CreateInstancePartitionRequest{
		Parent:              fmt.Sprintf("projects/%s/instances/%s", projectID, instanceID),
		InstancePartitionId: instancePartitionID,
		InstancePartition: &instancepb.InstancePartition{
			Config:          fmt.Sprintf("projects/%s/instanceConfigs/%s", projectID, "nam3"),
			DisplayName:     "my-instance-partition",
			ComputeCapacity: &instancepb.InstancePartition_NodeCount{NodeCount: 1},
		},
	})
	if err != nil {
		return fmt.Errorf("could not create instance partition %s: %w", fmt.Sprintf("projects/%s/instances/%s/instancePartitions/%s", projectID, instanceID, instancePartitionID), err)
	}
	// Wait for the instance partition creation to finish.
	i, err := op.Wait(ctx)
	if err != nil {
		return fmt.Errorf("waiting for instance partition creation to finish failed: %w", err)
	}
	// The instance partition may not be ready to serve yet.
	if i.State != instancepb.InstancePartition_READY {
		fmt.Fprintf(w, "instance partition state is not READY yet. Got state %v\n", i.State)
	}
	fmt.Fprintf(w, "Created instance partition [%s]\n", instancePartitionID)
	return nil
}

Java

Para saber cómo instalar y usar la biblioteca de cliente de Spanner, consulta el artículo Bibliotecas de cliente de Spanner.


import com.google.cloud.spanner.Spanner;
import com.google.cloud.spanner.SpannerOptions;
import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient;
import com.google.spanner.admin.instance.v1.CreateInstancePartitionRequest;
import com.google.spanner.admin.instance.v1.InstanceConfigName;
import com.google.spanner.admin.instance.v1.InstanceName;
import com.google.spanner.admin.instance.v1.InstancePartition;
import java.util.concurrent.ExecutionException;

class CreateInstancePartitionSample {

  static void createInstancePartition() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "my-project";
    String instanceId = "my-instance";
    String instancePartitionId = "my-instance-partition";
    createInstancePartition(projectId, instanceId, instancePartitionId);
  }

  static void createInstancePartition(
      String projectId, String instanceId, String instancePartitionId) {
    // Set instance partition configuration.
    int nodeCount = 1;
    String displayName = "Descriptive name";

    // Create an InstancePartition object that will be used to create the instance partition.
    InstancePartition instancePartition =
        InstancePartition.newBuilder()
            .setDisplayName(displayName)
            .setNodeCount(nodeCount)
            .setConfig(InstanceConfigName.of(projectId, "nam3").toString())
            .build();

    try (Spanner spanner =
            SpannerOptions.newBuilder().setProjectId(projectId).build().getService();
        InstanceAdminClient instanceAdminClient = spanner.createInstanceAdminClient()) {

      // Wait for the createInstancePartition operation to finish.
      InstancePartition createdInstancePartition =
          instanceAdminClient
              .createInstancePartitionAsync(
                  CreateInstancePartitionRequest.newBuilder()
                      .setParent(InstanceName.of(projectId, instanceId).toString())
                      .setInstancePartitionId(instancePartitionId)
                      .setInstancePartition(instancePartition)
                      .build())
              .get();
      System.out.printf(
          "Instance partition %s was successfully created%n", createdInstancePartition.getName());
    } catch (ExecutionException e) {
      System.out.printf(
          "Error: Creating instance partition %s failed with error message %s%n",
          instancePartition.getName(), e.getMessage());
    } catch (InterruptedException e) {
      System.out.println(
          "Error: Waiting for createInstancePartition operation to finish was interrupted");
    }
  }
}

Node.js

Para saber cómo instalar y usar la biblioteca de cliente de Spanner, consulta el artículo Bibliotecas de cliente de Spanner.

// Imports the Google Cloud client library
const {Spanner} = require('@google-cloud/spanner');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = 'my-project-id';
// const instanceId = 'my-instance';
// const instancePartitionId = 'my-instance-partition';

// Creates a client
const spanner = new Spanner({
  projectId: projectId,
});

// Get the instance admin client
const instanceAdminClient = spanner.getInstanceAdminClient();

// Creates a new instance partition
try {
  console.log(
    `Creating instance partition ${instanceAdminClient.instancePartitionPath(
      projectId,
      instanceId,
      instancePartitionId,
    )}.`,
  );
  const [operation] = await instanceAdminClient.createInstancePartition({
    instancePartitionId: instancePartitionId,
    parent: instanceAdminClient.instancePath(projectId, instanceId),
    instancePartition: {
      config: instanceAdminClient.instanceConfigPath(projectId, 'nam3'),
      nodeCount: 1,
      displayName: 'Test instance partition',
    },
  });

  console.log(
    `Waiting for operation on ${instancePartitionId} to complete...`,
  );
  await operation.promise();

  console.log(`Created instance partition ${instancePartitionId}.`);
} catch (err) {
  console.error('ERROR:', err);
}

PHP

Para saber cómo instalar y usar la biblioteca de cliente de Spanner, consulta el artículo Bibliotecas de cliente de Spanner.

use Google\Cloud\Spanner\Admin\Instance\V1\Client\InstanceAdminClient;
use Google\Cloud\Spanner\Admin\Instance\V1\CreateInstancePartitionRequest;
use Google\Cloud\Spanner\Admin\Instance\V1\InstancePartition;

/**
 * Creates an instance partition.
 * Example:
 * ```
 * create_instance_partition($projectId, $instanceId, $instancePartitionId);
 * ```
 *
 * @param string $projectId The Google Cloud project ID.
 * @param string $instanceId The Spanner instance ID.
 * @param string $instancePartitionId The instance partition ID.
 */
function create_instance_partition(string $projectId, string $instanceId, string $instancePartitionId): void
{
    $instanceAdminClient = new InstanceAdminClient();

    $instanceName = $instanceAdminClient->instanceName($projectId, $instanceId);
    $instancePartitionName = $instanceAdminClient->instancePartitionName($projectId, $instanceId, $instancePartitionId);
    $configName = $instanceAdminClient->instanceConfigName($projectId, 'nam3');

    $instancePartition = (new InstancePartition())
        ->setConfig($configName)
        ->setDisplayName('Test instance partition.')
        ->setNodeCount(1);

    $operation = $instanceAdminClient->createInstancePartition(
        (new CreateInstancePartitionRequest())
        ->setParent($instanceName)
        ->setInstancePartitionId($instancePartitionId)
        ->setInstancePartition($instancePartition)
    );

    print('Waiting for operation to complete...' . PHP_EOL);
    $operation->pollUntilComplete();

    printf('Created instance partition %s' . PHP_EOL, $instancePartitionId);
}

Python

Para saber cómo instalar y usar la biblioteca de cliente de Spanner, consulta el artículo Bibliotecas de cliente de Spanner.

def create_instance_partition(instance_id, instance_partition_id):
    """Creates an instance partition."""
    from google.cloud.spanner_admin_instance_v1.types import spanner_instance_admin

    spanner_client = spanner.Client()
    instance_admin_api = spanner_client.instance_admin_api

    config_name = "{}/instanceConfigs/nam3".format(spanner_client.project_name)

    operation = spanner_client.instance_admin_api.create_instance_partition(
        parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
        instance_partition_id=instance_partition_id,
        instance_partition=spanner_instance_admin.InstancePartition(
            config=config_name,
            display_name="Test instance partition",
            node_count=1,
        ),
    )

    print("Waiting for operation to complete...")
    operation.result(OPERATION_TIMEOUT_SECONDS)

    print("Created instance partition {}".format(instance_partition_id))

Describe una partición de instancia

gcloud

Para describir una partición de instancia, usa gcloud beta spanner instance-partitions describe.

gcloud beta spanner instance-partitions describe PARTITION_ID \
  --instance=INSTANCE_ID

Haz los cambios siguientes:

  • INSTANCE_PARTITION_ID: identificador permanente de la partición de la instancia.
  • INSTANCE_ID: identificador permanente de la instancia.

Por ejemplo, para describir la partición de instancia europe-partition, ejecuta lo siguiente:

  gcloud beta spanner instance-partitions describe europe-partition
    --instance=test-instance

Mostrar particiones de instancias

Consola

  1. En la Google Cloud consola, abre la página Spanner.

    Ir a Spanner

  2. Selecciona una instancia de la lista.

  3. En el menú de navegación, selecciona Particiones de instancias.

    Se muestra una lista de particiones de instancias asociadas a esa instancia.

gcloud

Para enumerar las particiones de tu instancia, usa gcloud beta spanner instance-partitions list.

gcloud beta spanner instance-partitions list --instance=INSTANCE_ID

La CLI de gcloud muestra una lista de las particiones de instancia de Spanner, junto con el ID, el nombre visible, la configuración y la capacidad de computación de cada partición de instancia.

Editar una partición de instancia

En la siguiente sección se explica cómo cambiar la capacidad de computación de la partición de tu instancia. No puedes cambiar el ID, el nombre ni la configuración de la partición de la instancia.

Cambiar la capacidad de computación

Debes aprovisionar suficiente capacidad de computación para que la utilización de la CPU y la utilización del almacenamiento no superen los máximos recomendados. Para obtener más información, consulta las cuotas y los límites de Spanner.

Si quieres aumentar la capacidad de computación de una partición de instancia, tuGoogle Cloud proyecto debe tener cuota suficiente para añadirla. El tiempo que se tarda en completar la solicitud de aumento depende del tamaño de la solicitud. En la mayoría de los casos, las solicitudes se completan en unos minutos. En raras ocasiones, el aumento de recursos puede tardar hasta una hora en completarse.

Consola

  1. En la Google Cloud consola, abre la página Spanner.

    Ir a Spanner

  2. Selecciona una instancia de la lista.

  3. En el menú de navegación, selecciona Particiones de instancias.

  4. En la lista de particiones de instancias, en la columna Acciones, haga clic en Más acciones y seleccione Editar.

  5. Cambia la capacidad de computación eligiendo una unidad de medida (unidades de procesamiento o nodos) y, a continuación, introduciendo una cantidad. Cuando uses unidades de procesamiento, introduce cantidades en múltiplos de 1000 (1000, 2000, 3000, etc.). Cada nodo equivale a 1000 unidades de procesamiento.

    Tu partición de instancia debe tener al menos un nodo (1000 unidades de procesamiento).

  6. Haz clic en Guardar.

    Si ves un cuadro de diálogo que indica que no tienes suficiente cuota para añadir capacidad de computación , sigue las instrucciones para solicitar una cuota superior.

gcloud

Para cambiar la capacidad de computación de la partición de tu instancia, usa gcloud beta spanner instance-partitions update. Cuando uses este comando, especifica la capacidad de computación como un número de nodos o unidades de procesamiento.

gcloud beta spanner instance-partitions update INSTANCE_PARTITION_ID \
  --instance=INSTANCE_ID \
  [--nodes=NODE_COUNT | --processing-units=PROCESSING_UNIT_COUNT]
  [--async]

Haz los cambios siguientes:

  • INSTANCE_PARTITION_ID: identificador permanente de la partición de la instancia.
  • INSTANCE_ID: identificador permanente de la instancia.
  • NODE_COUNT: la nueva capacidad de computación de la partición de la instancia, expresada como número de nodos. Un nodo equivale a 1000 unidades de procesamiento.
  • PROCESSING_UNIT_COUNT: la nueva capacidad de computación de la partición de la instancia, expresada como un número de unidades de procesamiento. Tu partición de instancia debe tener al menos 1000 unidades de procesamiento. Introduce cantidades en múltiplos de 1000 (1000, 2000, 3000, etc.).

Marcas posibles

  • --async: use esta marca si quiere que su solicitud se devuelva inmediatamente, sin esperar a que se complete la operación en curso.

Puedes consultar el estado de tu solicitud ejecutando gcloud spanner operations describe.

Eliminar una partición de instancia

No puedes eliminar una partición de instancia mientras esté asociada a ningún emplazamiento ni dato. Antes de eliminar una partición de instancia, primero debes mover los datos que haya en ella o eliminar las tablas de colocación que la usen.

Consola

  1. En la Google Cloud consola, abre la página Spanner.

    Ir a Spanner

  2. Selecciona una instancia de la lista.

  3. En el menú de navegación, selecciona Particiones de instancias.

  4. En la lista de particiones de instancia, en la columna Acciones, haga clic en Más acciones y seleccione Eliminar.

  5. Sigue las instrucciones para confirmar que quieres eliminar la partición de la instancia.

  6. Haz clic en Eliminar.

gcloud

Usa el comando gcloud beta spanner instance-partitions delete.

gcloud beta spanner instance-partitions delete INSTANCE_PARTITION_ID
  --instance=INSTANCE_ID

Siguientes pasos