Membuat dan mengelola partisi instance

Halaman ini menjelaskan cara membuat dan mengelola partisi instance Spanner.

Sebelum memulai

Untuk menggunakan partisi instance, Anda harus menetapkan opsi database opt_in_dataplacement_preview di database kosong:

Konsol

  1. Buka halaman Instances di konsol Google Cloud .

    Instance

  2. Pilih instance tempat Anda ingin menambahkan partisi instance.

  3. Pilih database kosong tempat Anda ingin memartisi data.

  4. Di menu navigasi, klik Spanner Studio.

  5. Di halaman Spanner Studio, klik Tab baru atau gunakan tab editor yang kosong.

  6. Masukkan pernyataan DDL ALTER DATABASE berikut.

    GoogleSQL

    ALTER DATABASE DATABASE_ID SET OPTIONS (opt_in_dataplacement_preview = true);
    

    Ganti DATABASE_ID dengan ID unik database Anda.

    PostgreSQL

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

    Ganti DATABASE_ID dengan ID unik database Anda.

  7. Klik Run.

gcloud

Untuk menetapkan opsi database opt_in_dataplacement_preview, gunakan 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);"

Ganti kode berikut:

  • DATABASE_ID: ID permanen untuk database Spanner Anda.
  • INSTANCE_ID: ID permanen untuk instance Spanner Anda.

PostgreSQL

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

Ganti kode berikut:

  • DATABASE_ID: ID permanen untuk database Spanner Anda.
  • INSTANCE_ID: ID permanen untuk instance Spanner Anda.

Membuat partisi instance

Konsol

  1. Di Google Cloud console, buka halaman Spanner.

    Buka Spanner

  2. Pilih instance tempat Anda ingin menambahkan partisi instance.

  3. Di menu navigasi, pilih Partisi instance.

  4. Klik Create instance partition.

  5. Masukkan ID Partisi untuk mengidentifikasi partisi instance Anda secara permanen. ID partisi instance juga harus unik dalam projectGoogle Cloud Anda. Anda tidak dapat mengubah ID partisi instance nanti.

  6. Di bagian Pilih konfigurasi, pilih Regional atau Multi-region. Atau, jika Anda ingin membandingkan spesifikasi antar-region, klik Bandingkan konfigurasi region.

  7. Pilih konfigurasi dari menu drop-down.

  8. Di bagian Allocate compute capacity, di bagian Unit, klik salah satu opsi berikut:

    • Unit pemrosesan untuk partisi instance kecil.
    • Node untuk instance besar. Node adalah 1.000 unit pemrosesan.
  9. Masukkan nilai untuk unit yang dipilih.

    Partisi instance Anda harus memiliki setidaknya satu node atau 1.000 unit pemrosesan.

  10. Klik Create untuk membuat partisi instance.

gcloud

Untuk membuat partisi instance, gunakan 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]

Ganti kode berikut:

  • INSTANCE_PARTITION_ID: ID partisi instance permanen yang unik dalam Google Cloud project Anda. Anda tidak dapat mengubah ID partisi instance nanti.
  • INSTANCE_PARTITION_CONFIG: ID permanen konfigurasi partisi instance Anda, yang menentukan lokasi geografis partisi instance dan memengaruhi tempat data disimpan.
  • INSTANCE_PARTITION_DESCRIPTION: nama yang akan ditampilkan untuk partisi instance di konsol Google Cloud . Nama partisi instance harus unik dalam project Google Cloud Anda.
  • INSTANCE_ID: ID permanen untuk instance Spanner tempat partisi instance ini berada.
  • NODE_COUNT: kapasitas komputasi partisi instance, dinyatakan sebagai jumlah node. Satu node sama dengan 1.000 unit pemrosesan.
  • PROCESSING_UNIT_COUNT: kapasitas komputasi instance, yang dinyatakan sebagai jumlah unit pemrosesan. Partisi instance Anda harus memiliki minimal 1.000 unit pemrosesan. Masukkan jumlah dalam kelipatan 1.000 (1.000, 2.000, 3.000, dan seterusnya).

Misalnya, untuk membuat partisi instance europe-partition di eur3 dengan 5 node, jalankan perintah berikut:

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

Library klien

C++

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien 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#

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien 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))

Mendeskripsikan partisi instance

gcloud

Untuk mendeskripsikan partisi instance, gunakan gcloud beta spanner instance-partitions describe.

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

Ganti kode berikut:

  • INSTANCE_PARTITION_ID: ID permanen untuk partisi instance.
  • INSTANCE_ID: ID permanen untuk instance.

Misalnya, untuk mendeskripsikan partisi instance europe-partition, jalankan perintah berikut:

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

Mencantumkan partisi instance

Konsol

  1. Di Google Cloud console, buka halaman Spanner.

    Buka Spanner

  2. Pilih instance dari daftar.

  3. Di menu navigasi, pilih Partisi instance.

    Daftar partisi instance yang terkait dengan instance tersebut akan ditampilkan.

gcloud

Untuk mencantumkan partisi instance Anda, gunakan gcloud beta spanner instance-partitions list.

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

gcloud CLI mencetak daftar partisi instance Spanner Anda, beserta ID, nama tampilan, konfigurasi, dan kapasitas komputasi setiap partisi instance.

Mengedit partisi instance

Bagian berikut menjelaskan cara mengubah kapasitas komputasi partisi instance Anda. Anda tidak dapat mengubah ID partisi, nama, atau konfigurasi instance.

Mengubah kapasitas komputasi

Anda harus menyediakan kapasitas komputasi yang cukup untuk menjaga pemanfaatan CPU dan pemanfaatan penyimpanan di bawah batas maksimum yang direkomendasikan. Untuk mengetahui informasi selengkapnya, lihat kuota dan batas untuk Spanner.

Jika Anda ingin meningkatkan kapasitas komputasi partisi instance,Google Cloud project Anda harus memiliki kuota yang memadai untuk menambahkan kapasitas komputasi. Waktu yang diperlukan untuk menyelesaikan permintaan penambahan bergantung pada ukuran permintaan. Biasanya, permintaan selesai dalam beberapa menit. Dalam kasus yang jarang terjadi, penskalaan mungkin memerlukan waktu hingga satu jam untuk selesai.

Konsol

  1. Di Google Cloud console, buka halaman Spanner.

    Buka Spanner

  2. Pilih instance dari daftar.

  3. Di menu navigasi, pilih Partisi instance.

  4. Dalam daftar partisi instance, di kolom Tindakan, klik Tindakan Lainnya, lalu pilih Edit.

  5. Ubah kapasitas komputasi dengan memilih satuan pengukuran (unit pemrosesan atau node), lalu masukkan jumlah. Saat menggunakan unit pemrosesan, masukkan jumlah dalam kelipatan 1000 (1000, 2000, 3000, dan seterusnya). Setiap node sama dengan 1.000 unit pemrosesan.

    Partisi instance Anda harus memiliki setidaknya satu node (1.000 unit pemrosesan).

  6. Klik Simpan.

    Jika Anda melihat dialog yang menyatakan bahwa Anda tidak memiliki kuota yang cukup untuk menambahkan kapasitas komputasi , ikuti petunjuk untuk meminta kuota yang lebih tinggi.

gcloud

Untuk mengubah kapasitas komputasi partisi instance, gunakan gcloud beta spanner instance-partitions update. Saat menggunakan perintah ini, tentukan kapasitas komputasi sebagai jumlah node atau unit pemrosesan.

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

Ganti kode berikut:

  • INSTANCE_PARTITION_ID: ID permanen untuk partisi instance.
  • INSTANCE_ID: ID permanen untuk instance.
  • NODE_COUNT: kapasitas komputasi baru partisi instance, dinyatakan sebagai jumlah node. Satu node sama dengan 1.000 unit pemrosesan.
  • PROCESSING_UNIT_COUNT: kapasitas komputasi baru partisi instance, yang dinyatakan sebagai jumlah unit pemrosesan. Partisi instance Anda harus memiliki minimal 1.000 unit pemrosesan. Masukkan jumlah dalam kelipatan 1000 (1000, 2000, 3000, dan seterusnya).

Flag opsional:

  • --async: Gunakan tanda ini jika Anda ingin permintaan segera ditampilkan, tanpa menunggu operasi yang sedang berlangsung selesai.

Anda dapat memeriksa status permintaan dengan menjalankan gcloud spanner operations describe.

Menghapus partisi instance

Anda tidak dapat menghapus partisi instance saat partisi tersebut dikaitkan dengan penempatan atau data apa pun. Anda harus memindahkan data apa pun yang ada di partisi instance atau menghapus tabel penempatan yang menggunakan partisi instance sebelum Anda dapat menghapus partisi instance.

Konsol

  1. Di Google Cloud console, buka halaman Spanner.

    Buka Spanner

  2. Pilih instance dari daftar.

  3. Di menu navigasi, pilih Partisi instance.

  4. Dalam daftar partisi instance, di kolom Tindakan, klik Tindakan Lainnya, lalu pilih Hapus.

  5. Ikuti petunjuk untuk mengonfirmasi bahwa Anda ingin menghapus partisi Instance.

  6. Klik Hapus.

gcloud

Gunakan perintah gcloud beta spanner instance-partitions delete.

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

Langkah berikutnya