Crea e gestisci le partizioni delle istanze

Questa pagina descrive come creare e gestire le partizioni di istanze Spanner.

Prima di iniziare

Per utilizzare le partizioni dell'istanza, devi impostare l'opzione di database opt_in_dataplacement_preview nel database vuoto:

Console

  1. Vai alla pagina Istanze nella console Google Cloud .

    Istanze

  2. Seleziona l'istanza in cui vuoi aggiungere le partizioni dell'istanza.

  3. Seleziona il database vuoto in cui vuoi partizionare i dati.

  4. Nel menu di navigazione, fai clic su Spanner Studio.

  5. Nella pagina Spanner Studio, fai clic su Nuova scheda o utilizza la scheda dell'editor vuota.

  6. Inserisci la seguente istruzione DDL ALTER DATABASE.

    GoogleSQL

    ALTER DATABASE DATABASE_ID SET OPTIONS (opt_in_dataplacement_preview = true);
    

    Sostituisci DATABASE_ID con l'identificatore univoco del tuo database.

    PostgreSQL

    ALTER DATABASE DATABASE_ID SET "spanner.opt_in_dataplacement_preview" = TRUE;
    

    Sostituisci DATABASE_ID con l'identificatore univoco del tuo database.

  7. Fai clic su Esegui.

gcloud

Per impostare l'opzione del database opt_in_dataplacement_preview, utilizza gcloud spanner databases ddl update.

GoogleSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (opt_in_dataplacement_preview = true);"

Sostituisci quanto segue:

  • DATABASE_ID: l'identificatore permanente del tuo database Spanner.
  • INSTANCE_ID: l'identificatore permanente dell'istanza Spanner.

PostgreSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID SET "spanner.opt_in_dataplacement_preview" = TRUE"

Sostituisci quanto segue:

  • DATABASE_ID: l'identificatore permanente del tuo database Spanner.
  • INSTANCE_ID: l'identificatore permanente dell'istanza Spanner.

Crea una partizione dell'istanza

Console

  1. Nella console Google Cloud , apri la pagina Spanner.

    Vai a Spanner

  2. Seleziona l'istanza in cui vuoi aggiungere le partizioni dell'istanza.

  3. Nel menu di navigazione, seleziona Partizioni istanza.

  4. Fai clic su Crea partizione dell'istanza.

  5. Inserisci un ID partizione per identificare in modo permanente la partizione della tua istanza. L'ID partizione dell'istanza deve essere univoco anche all'interno del tuo Google Cloud progetto. Non puoi modificare l'ID partizione dell'istanza in un secondo momento.

  6. Nella sezione Scegli una configurazione, seleziona Regionale o Più regioni. In alternativa, se vuoi confrontare le specifiche tra le regioni, fai clic su Confronta configurazioni per regioni.

  7. Seleziona una configurazione dal menu a discesa.

  8. Nella sezione Alloca capacità di calcolo, in Unità, fai clic su una delle seguenti opzioni:

    • Unità di elaborazione per le partizioni di istanze di piccole dimensioni.
    • Nodi per istanze di grandi dimensioni. Un nodo è pari a 1000 unità di elaborazione.
  9. Inserisci un valore per l'unità selezionata.

    La partizione dell'istanza deve avere almeno un nodo o 1000 unità di elaborazione.

  10. Fai clic su Crea per creare la partizione dell'istanza.

gcloud

Per creare una partizione dell'istanza, utilizza 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]

Sostituisci quanto segue:

  • INSTANCE_PARTITION_ID: l'identificatore della partizione dell'istanza permanente univoco all'interno del tuo progetto Google Cloud . Non puoi modificare l'ID partizione dell'istanza in un secondo momento.
  • INSTANCE_PARTITION_CONFIG: l'identificatore permanente della configurazione della partizione dell'istanza, che definisce la posizione geografica della partizione dell'istanza e influisce sulla posizione di archiviazione dei dati.
  • INSTANCE_PARTITION_DESCRIPTION: il nome da visualizzare per la partizione dell'istanza nella console Google Cloud . Il nome della partizione dell'istanza deve essere univoco all'interno del progetto Google Cloud .
  • INSTANCE_ID: l'identificatore permanente della tua istanza Spanner in cui risiede questa partizione dell'istanza.
  • NODE_COUNT: la capacità di calcolo della partizione dell'istanza, espressa come numero di nodi. Un nodo equivale a 1000 unità di elaborazione.
  • PROCESSING_UNIT_COUNT: la capacità di calcolo dell'istanza, espressa come numero di unità di elaborazione. La partizione dell'istanza deve avere almeno 1000 unità di elaborazione. Inserisci le quantità in multipli di 1000 (1000, 2000, 3000 e così via).

Ad esempio, per creare una partizione di istanza europe-partition in eur3 con 5 nodi, esegui il seguente comando:

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

Librerie client

C++

Per scoprire come installare e utilizzare la libreria client per Spanner, consulta la sezione Librerie client 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#

Per scoprire come installare e utilizzare la libreria client per Spanner, consulta la sezione Librerie client 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;
    }
}

Vai

Per scoprire come installare e utilizzare la libreria client per Spanner, consulta la sezione Librerie client 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

Per scoprire come installare e utilizzare la libreria client per Spanner, consulta la sezione Librerie client 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

Per scoprire come installare e utilizzare la libreria client per Spanner, consulta la sezione Librerie client 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

Per scoprire come installare e utilizzare la libreria client per Spanner, consulta la sezione Librerie client 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

Per scoprire come installare e utilizzare la libreria client per Spanner, consulta la sezione Librerie client 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))

Descrivere una partizione dell'istanza

gcloud

Per descrivere una partizione di istanza, utilizza gcloud beta spanner instance-partitions describe.

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

Sostituisci quanto segue:

  • INSTANCE_PARTITION_ID: l'identificatore permanente della partizione dell'istanza.
  • INSTANCE_ID: l'identificatore permanente dell'istanza.

Ad esempio, per descrivere la partizione dell'istanza europe-partition, esegui il comando seguente:

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

Elenca partizioni istanza

Console

  1. Nella console Google Cloud , apri la pagina Spanner.

    Vai a Spanner

  2. Seleziona un'istanza dall'elenco.

  3. Nel menu di navigazione, seleziona Partizioni istanza.

    Viene visualizzato un elenco di partizioni dell'istanza associate a questa istanza.

gcloud

Per elencare le partizioni dell'istanza, utilizza gcloud beta spanner instance-partitions list.

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

Gcloud CLI stampa un elenco delle partizioni dell'istanza Spanner, insieme all'ID, al nome visualizzato, alla configurazione e alla capacità di calcolo di ogni partizione dell'istanza.

Modificare una partizione dell'istanza

La sezione seguente spiega come modificare la capacità di calcolo della partizione dell'istanza. Non puoi modificare l'ID, il nome o la configurazione della partizione dell'istanza.

Modificare la capacità di calcolo

Devi eseguire il provisioning di una capacità di calcolo sufficiente a mantenere l'utilizzo della CPU e l'utilizzo dello spazio di archiviazione al di sotto dei massimi consigliati. Per ulteriori informazioni, consulta quote e limiti per Spanner.

Se vuoi aumentare la capacità di calcolo di una partizione dell'istanza, il tuo Google Cloud progetto deve avere una quota sufficiente per aggiungere la capacità di calcolo. Il tempo necessario per completare la richiesta di aumento dipende dalle dimensioni della richiesta. Nella maggior parte dei casi, le richieste vengono completate in pochi minuti. In rari casi, l'upgrade potrebbe richiedere fino a un'ora.

Console

  1. Nella console Google Cloud , apri la pagina Spanner.

    Vai a Spanner

  2. Seleziona un'istanza dall'elenco.

  3. Nel menu di navigazione, seleziona Partizioni istanza.

  4. Nell'elenco delle partizioni dell'istanza, nella colonna Azioni, fai clic su Altre azioni e seleziona Modifica.

  5. Modifica la capacità di calcolo scegliendo un'unità di misura (unità di elaborazione o nodi) e poi inserendo una quantità. Quando utilizzi le unità di elaborazione, inserisci quantità in multipli di 1000 (1000, 2000, 3000 e così via). Ogni nodo equivale a 1000 unità di elaborazione.

    La partizione dell'istanza deve avere almeno un nodo (1000 unità di elaborazione).

  6. Fai clic su Salva.

    Se viene visualizzata una finestra di dialogo che indica che la quota è insufficiente per aggiungere capacità di calcolo , segui le istruzioni per richiedere una quota più alta.

gcloud

Per modificare la capacità di calcolo della partizione dell'istanza, utilizza gcloud beta spanner instance-partitions update. Quando utilizzi questo comando, specifica la capacità di calcolo come numero di nodi o unità di elaborazione.

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

Sostituisci quanto segue:

  • INSTANCE_PARTITION_ID: l'identificatore permanente della partizione dell'istanza.
  • INSTANCE_ID: l'identificatore permanente dell'istanza.
  • NODE_COUNT: la nuova capacità di calcolo della partizione dell'istanza, espressa come numero di nodi. Un nodo equivale a 1000 unità di elaborazione.
  • PROCESSING_UNIT_COUNT: la nuova capacità di calcolo della partizione dell'istanza, espressa come numero di unità di elaborazione. La partizione dell'istanza deve avere almeno 1000 unità di elaborazione. Inserisci le quantità in multipli di 1000 (1000, 2000, 3000 e così via).

Flag facoltativi:

  • --async: utilizza questo flag se vuoi che la richiesta venga restituita immediatamente, senza attendere il completamento dell'operazione in corso.

Puoi controllare lo stato della tua richiesta eseguendo gcloud spanner operations describe.

Elimina una partizione dell'istanza

Non puoi eliminare una partizione dell'istanza mentre è associata a posizionamenti o dati. Prima di poter eliminare la partizione dell'istanza, devi prima spostare tutti i dati che si trovano nella partizione dell'istanza o eliminare le tabelle di posizionamento che utilizzano la partizione dell'istanza.

Console

  1. Nella console Google Cloud , apri la pagina Spanner.

    Vai a Spanner

  2. Seleziona un'istanza dall'elenco.

  3. Nel menu di navigazione, seleziona Partizioni istanza.

  4. Nell'elenco delle partizioni dell'istanza, nella colonna Azioni, fai clic su Altre azioni e seleziona Elimina.

  5. Segui le istruzioni per confermare che vuoi eliminare la partizione Instance.

  6. Fai clic su Elimina.

gcloud

Utilizza il comando gcloud beta spanner instance-partitions delete.

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

Passaggi successivi