Gerenciar e observar operações de longa duração

Esta página descreve como gerenciar o ciclo de vida de uma operação de longa duração do Spanner usando comandos gcloud spanner operations e a API REST de operações. Alguns procedimentos também podem ser feitos no console do Google Cloud.

Operações de longa duração são chamadas de método que podem levar um tempo considerável para serem concluídas. O Spanner cria operações de longa duração para várias ações de instância, banco de dados e backup. Um exemplo é o método para restaurar um banco de dados, projects.instances.databases.restore. Quando você restaura um banco de dados, o serviço do Spanner cria uma operação de longa duração para acompanhar o progresso da restauração. Se a operação estiver demorando mais do que o esperado, use gcloud para verificar o progresso da operação. Se a operação não responder, use gcloud para cancelá-la.

O Spanner fornece APIs de operações que permitem verificar o progresso de operações de longa duração. Você também pode listar e cancelar operações de longa duração e excluir operações de instâncias de longa duração.

É possível verificar e gerenciar operações de longa duração com:

Comandos da API REST para gerenciamento de operações

Gerencie as operações de longa duração do Spanner usando os seguintes métodos REST:

Ação Operações de banco de dados de longa duração Operações de instância de longa duração
Cancelar uma operação de longa duração cancel cancel
Excluir uma operação de longa duração Sem suporte delete
Verificar o progresso de uma operação de longa duração get get
Listar operações de longa duração list list

Para informações sobre o uso do REST com o Spanner, consulte Primeiros passos com o Spanner usando o REST.

Operações de instância

Veja a seguir as operações de instâncias de longa duração.

Verificar o andamento de uma operação de instância de longa duração

Use projects.instances.operations.get para verificar o progresso de uma operação de instância de longa duração.

Como exemplo, esta é uma resposta de projects.instances.create:

  {
    "name": "projects/test01/instances/test-instance/operations/_auto_1492721321097206",
    "metadata": {
      "@type": "type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceMetadata",
      "instance": {
        "name": "projects/<VAR>PROJECT-ID</VAR>/instances/test-instance",
        "config": "projects/<VAR>PROJECT-ID</VAR>/instanceConfigs/regional-us-central1",
        "displayName": "Test Instance",
        "nodeCount": 1,
        "state": "READY"
      },
      "startTime": "2017-04-24T22:45:41.130854Z"
    }
  }

O valor name na parte de cima da resposta mostra que o serviço do Spanner criou uma operação de instância de longa duração chamada projects/test01/instances/test-instance/operations/_auto_1492721321097206.

Para verificar o progresso da operação de instância de longa duração:

  1. Acesse projects.instances.operations.get.
  2. Para name, insira o nome da operação de instância de longa duração, conforme mostrado na resposta para projects.instances.create ou projects.instances.patch. Exemplo:

    projects/PROJECT-ID/instances/INSTANCE-NAME/operations/OPERATION-ID

    Substitua:

    • PROJECT-ID: o ID do projeto;
    • INSTANCE-NAME: o nome da instância.
    • OPERATION-ID: o ID das operações.

    Para recuperar o nome da operação de instância, listar operações de instância de longa execução.

  3. Clique em Executar. Quando uma operação é concluída, o campo done é definido como true.

Para receber atualizações contínuas, invoque o método projects.instances.databases.operations.get repetidamente até que a operação seja concluída. Use um recuo entre cada solicitação. Por exemplo, faça uma solicitação a cada 10 segundos.

Listar operações de instância de longa duração

Use projects.instances.operations.list para listar operações de instância de longa duração.

  1. Navegue até projects.instances.operations.list.
  2. Para o nome, insira:

    projects/PROJECT-ID/instances/INSTANCE-NAME/operationsOPERATION-ID

    Substitua:

    • PROJECT-ID: o ID do projeto;
    • INSTANCE-NAME: o nome da instância.
    • OPERATION-ID: o ID das operações.
  3. Clique em Executar. A resposta contém uma lista de operações de longa duração.

Cancelar uma operação de instância de longa duração

Use projects.instances.operations.cancel para cancelar uma operação de instância de longa duração.

  1. Navegue até projects.instances.operations.cancel.
  2. Para name, insira o nome da operação de instância de longa duração, como mostrado na resposta da operação de instância de longa duração.

    projects/PROJECT-ID/instances/INSTANCE-NAME/operations/OPERATION-ID

    Substitua:

    • PROJECT-ID: o ID do projeto;
    • INSTANCE-NAME: o nome da instância.
    • OPERATION-ID: o ID das operações.

    Também é possível recuperar o nome da operação de instância listando as operações de instância de longa duração.

  3. Clique em Executar.

Excluir uma operação de instância de longa duração

Use projects.instances.operations.delete para excluir uma operação de instância de longa duração.

  1. Clique em projects.instances.operations.delete.
  2. Para name, insira o nome da operação de instância de longa duração, como mostrado na resposta da operação de instância de longa duração.

    projects/<VAR>PROJECT-ID</VAR>/instances/<VAR>INSTANCE-NAME</VAR>/operations/<VAR>OPERATION-ID</VAR>
    

    Substitua:

    • PROJECT-ID: o ID do projeto;
    • INSTANCE-NAME: o nome da instância.
    • OPERATION-ID: o ID das operações.

    Também é possível recuperar o nome da operação de instância listando as operações de instância de longa duração.

  3. Acesse Executar. A operação é excluída.

Operações de banco de dados

Veja abaixo as operações de banco de dados de longa duração.

Verificar o progresso de uma operação de banco de dados de longa duração

Use projects.instances.databases.operations.get para verificar o progresso de uma operação de banco de dados de longa duração.

Por exemplo, esta é uma resposta de projects.instances.databases.create:

{
  "name": "projects/test01/instances/test-instance/databases/example-db/operations/_auto_1492721321097206",
  "metadata": {
    "@type": "type.googleapis.com/google.spanner.admin.database.v1.CreateDatabaseMetadata",
    "database": "projects/test01/instances/test-instance/databases/example-db"
  }
}

O valor name na parte de cima da resposta mostra que o serviço do Spanner criou uma operação de banco de dados de longa duração chamada projects/test01/instances/test-instance/databases/example-db/operations/_auto_1492721321097206.

Para verificar o progresso da operação de banco de dados de longa duração:

  1. Acesse projects.instances.databases.operations.get.

  2. Para name, insira o nome da operação de banco de dados de longa duração, conforme mostrado na resposta para projects.instances.databases.create ou projects.instances.databases.updateDdl.

    projects/PROJECT-ID/instances/INSTANCE-NAME/databases/example-db/operations/OPERATION-ID

    Substitua:

    • PROJECT-ID: o ID do projeto;
    • INSTANCE-NAME: o nome da instância.
    • OPERATION-ID: o ID das operações.

    Também é possível recuperar o nome da operação do banco de dados listando operações de banco de dados de longa duração.

  3. Clique em Executar. Quando uma operação é concluída, o campo done é definido como true.

Para receber atualizações contínuas, invoque o método projects.instances.databases.operations.get repetidamente até que a operação seja concluída. Use um recuo entre cada solicitação. Por exemplo, faça uma solicitação a cada 10 segundos.

Listar operações de banco de dados de longa duração

Use projects.instances.databases.operations.list para listar operações de banco de dados de longa duração.

  1. Navegue até projects.instances.databases.operations.list.
  2. Para o nome, insira:

    projects/PROJECT-ID/instances/INSTANCE-NAME/databases/example-db/OPERATION-ID

    Substitua:

    • PROJECT-ID: o ID do projeto;
    • INSTANCE-NAME: o nome da instância.
    • OPERATION-ID: o ID das operações.
  3. Clique em Executar. A resposta contém uma lista de operações de longa duração.

Cancelar uma operação de banco de dados de longa duração

Use projects.instances.databases.operations.cancel para cancelar uma operação de banco de dados de longa duração.

  1. Navegue até projects.instances.databases.operations.cancel.
  2. Para name, insira o nome da operação do banco de dados de longa duração, como mostrado na resposta de operação do banco de dados de longa duração.

    projects/PROJECT-ID/instances/INSTANCE-NAME/databases/example-db/OPERATION-ID

    Substitua:

    • PROJECT-ID: o ID do projeto;
    • INSTANCE-NAME: o nome da instância.
    • OPERATION-ID: o ID das operações.

    Também é possível recuperar o nome da operação do banco de dados listando operações de banco de dados de longa duração.

  3. Clique em Executar.

Operações de atualização do esquema

Confira a seguir as operações de atualização de esquema de longa duração.

Verificar o progresso de uma operação de atualização de esquema de longa duração

Console

  1. No menu de navegação do Spanner, selecione a guia Operações. A página Operações mostra uma lista de operações em execução.

  2. Encontre a operação de esquema na lista. Se ainda estiver em execução, a barra de progresso na coluna Hora de término mostra a porcentagem da operação que foi concluída, conforme mostrado na imagem a seguir:

Captura de tela do indicador de progresso mostrando 98%

gcloud

Use gcloud spanner operations describe para verificar o progresso de uma operação.

  1. Consiga o ID da operação:

    gcloud spanner operations list \
    --instance=INSTANCE-NAME \
    --database=DATABASE-NAME \
    --type=DATABASE_UPDATE_DDL

    Substitua:

    • INSTANCE-NAME: o nome da instância do Spanner.
    • DATABASE-NAME: o nome da instância.
    • DATABASE-NAME: o nome do banco de dados.
  2. Execute gcloud spanner operations describe:

    gcloud spanner operations describe OPERATION-ID \
    --instance=INSTANCE-NAME \
    --database=DATABASE-NAME

    Substitua:

    • OPERATION-ID: o ID da operação que você quer verificar.
    • INSTANCE-NAME: o nome da instância do Spanner.
    • DATABASE-NAME: o nome do banco de dados do Spanner.

    A seção progress na saída mostra a porcentagem da operação que foi concluída. A saída será assim:

    done: true
    metadata:
    ...
      progress:
      - endTime: '2022-03-01T00:28:06.691403Z'
        progressPercent: 100
        startTime: '2022-03-01T00:28:04.221401Z'
      - endTime: '2022-03-01T00:28:17.624588Z'
        startTime: '2022-03-01T00:28:06.691403Z'
        progressPercent: 100
    ...
    

REST v1

Consiga o ID da operação:

gcloud spanner operations list \
--instance=INSTANCE-NAME \
--database=DATABASE-NAME \
--type=DATABASE_UPDATE_DDL

Substitua:

  • INSTANCE-NAME: o nome da instância do Spanner.
  • DATABASE-NAME: o nome do banco de dados.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT-ID: o ID do projeto.
  • INSTANCE-ID: o ID da instância
  • DATABASE-ID: o ID do banco de dados.
  • OPERATION-ID: o ID da operação.

Método HTTP e URL:

GET https://spanner.googleapis.com/v1/projects/PROJECT-ID/instances/INSTANCE-ID/databases/DATABASE-ID/operations/OPERATION-ID

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
...
    "progress": [
      {
        "progressPercent": 100,
        "startTime": "2023-05-27T00:52:27.366688Z",
        "endTime": "2023-05-27T00:52:30.184845Z"
      },
      {
        "progressPercent": 100,
        "startTime": "2023-05-27T00:52:30.184845Z",
        "endTime": "2023-05-27T00:52:40.750959Z"
      }
    ],
...
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

Se a operação demorar muito, você poderá cancelá-la. Para mais informações, consulte Cancelar uma operação de atualização de esquema de longa duração.

Listar operações de atualização de esquema de longa duração

gcloud

gcloud spanner operations list \
 --instance=INSTANCE-NAME \
 --database=DATABASE-NAME \
 --type=DATABASE_UPDATE_DDL

Substitua:

  • INSTANCE-NAME: o nome da instância do Spanner.
  • DATABASE-NAME: o nome do banco de dados.

A saída será assim:

OPERATION-ID     STATEMENTS                                                                                           DONE   @TYPE
_auto_op_123456  CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName)                                  False  UpdateDatabaseDdlMetadata
_auto_op_234567  CREATE INDEX SongsBySingerAlbumSongName ON Songs(SingerId, AlbumId, SongName), INTERLEAVE IN Albums  True   CreateDatabaseMetadata

Cancelar uma operação de atualização de esquema de longa duração

gcloud

  1. Consiga o ID da operação:

    gcloud spanner operations list \
    --instance=INSTANCE-NAME \
    --database=DATABASE-NAME \
    --type=DATABASE_UPDATE_DDL

    Substitua:

    • INSTANCE-NAME: o nome da instância do Spanner.
    • DATABASE-NAME: o nome do banco de dados.
  2. Use gcloud spanner operations cancel para cancelar uma operação de atualização de esquema de longa duração.

    gcloud spanner operations cancel OPERATION-ID \
     --instance=INSTANCE-NAME

    Substitua:

    • OPERATION-ID: o ID da operação que você quer verificar.
    • INSTANCE-NAME: o nome da instância do Spanner.

REST V1

Use projects.instances.databases.operations.cancel para cancelar uma operação de atualização de esquema de longa duração.

  1. Consiga o ID da operação:

    gcloud spanner operations list \
    --instance=INSTANCE-NAME \
    --database=DATABASE-NAME \
    --type=DATABASE_UPDATE_DDL

    Substitua:

    • INSTANCE-NAME: o nome da instância do Spanner.
    • DATABASE-NAME: o nome do banco de dados.
  2. Navegue até projects.instances.databases.operations.cancel.

  3. Em name, insira o nome da operação de atualização de esquema de longa duração, conforme mostrado na resposta da operação de atualização de esquema de longa duração.

    projects/PROJECT-ID/instances/INSTANCE-NAME/databases/example-db/operations/OPERATION-ID

    Substitua:

    • PROJECT-ID: o ID do projeto;
    • INSTANCE-NAME: o nome da instância.
    • OPERATION-ID: o ID das operações.

    Também é possível recuperar o nome da operação de atualização de esquema listando as operações de instância de longa duração.

  4. Clique em Executar. A operação para de ser executada.

Operações de backup e restauração

Veja a seguir as operações de backup de longa duração.

Verificar o progresso de uma operação de backup ou restauração de longa duração

Console

Backup

  1. No menu de navegação do Spanner, selecione a guia Operações. A página Operações mostra uma lista das operações em execução.

  2. Encontre a operação de esquema na lista. Se ainda estiver em execução, a barra de progresso na coluna Hora de término mostra a porcentagem da operação que foi concluída, conforme mostrado na imagem a seguir:

Captura de tela do indicador de progresso mostrando 98%

Restaurar

Para verificar o progresso da operação de restauração, consulte o indicador de progresso que aparece durante a restauração, conforme mostrado na imagem a seguir:

Captura de tela do indicador de progresso mostrando 56%

Se a operação demorar muito, você poderá cancelá-la. Para mais informações, consulte Cancelar uma operação de instância de longa duração.

gcloud

Use gcloud spanner operations describe para verificar o progresso de uma operação de backup ou restauração.

  1. Consiga o ID da operação:

    gcloud spanner operations list \
    --instance=INSTANCE-NAME \
    --database=DATABASE-NAME \
    --type=TYPE

    Substitua:

    • INSTANCE-NAME: o nome da instância do Spanner.
    • DATABASE-NAME: o nome do banco de dados.
    • TYPE: o tipo da operação. Os valores possíveis são BACKUP e DATABASE_RESTORE.
  2. Execute gcloud spanner operations describe:

    gcloud spanner operations describe OPERATION-ID \
    --instance=INSTANCE-NAME \
    --database=DATABASE-NAME

    Substitua:

    • OPERATION-ID: o ID da operação que você quer verificar.
    • INSTANCE-NAME: o nome da instância do Spanner.
    • DATABASE-NAME: o nome do banco de dados do Spanner.

    A seção progress na saída mostra a porcentagem da operação que foi concluída. A saída será assim:

    done: true
    metadata:
    ...
      progress:
      - endTime: '2022-03-01T00:28:06.691403Z'
        progressPercent: 100
        startTime: '2022-03-01T00:28:04.221401Z'
      - endTime: '2022-03-01T00:28:17.624588Z'
        startTime: '2022-03-01T00:28:06.691403Z'
        progressPercent: 100
    ...
    

REST v1

Consiga o ID da operação:

 gcloud spanner operations list 
--instance=INSTANCE-NAME
--database=DATABASE-NAME
--type=DATABASE_UPDATE_DDL

Substitua:

  • INSTANCE-NAME: o nome da instância do Spanner.
  • DATABASE-NAME: o nome do banco de dados.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT-ID: o ID do projeto.
  • INSTANCE-ID: o ID da instância
  • DATABASE-ID: o ID do banco de dados.
  • OPERATION-ID: o ID da operação.

Método HTTP e URL:

GET https://spanner.googleapis.com/v1/projects/PROJECT-ID/instances/INSTANCE-ID/databases/DATABASE-ID/operations/OPERATION-ID

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
...
    "progress": [
      {
        "progressPercent": 100,
        "startTime": "2023-05-27T00:52:27.366688Z",
        "endTime": "2023-05-27T00:52:30.184845Z"
      },
      {
        "progressPercent": 100,
        "startTime": "2023-05-27T00:52:30.184845Z",
        "endTime": "2023-05-27T00:52:40.750959Z"
      }
    ],
...
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

Se a operação demorar muito, você poderá cancelá-la. Para mais informações, consulte Cancelar uma operação de backup de longa duração.

Listar operações de backup ou restauração de longa duração

Use projects.instances.backups.operations.list para listar as operações em um único backup ou projects.instances.backupOperations.list para listar todas as operações de backup na instância.

  1. Navegue até projects.instances.backups.operations.list.

  2. Para o nome, insira:

    projects/PROJECT-ID/instances/INSTANCE-NAME/backups/BACKUP-NAME/OPERATION-ID

    Substitua:

    • PROJECT-ID: o ID do projeto;
    • INSTANCE-NAME: o nome da instância.
    • BACKUP-NAME: o nome do backup.
    • OPERATION-ID: o ID das operações.
  3. Clique em Executar. A resposta contém uma lista de operações de longa duração.

Cancelar uma operação de backup de longa duração

Use projects.instances.backups.operations.cancel para cancelar uma operação de backup de longa duração.

  1. Navegue até projects.instances.backups.operations.cancel.

  2. Em name, insira o nome da operação de backup de longa duração, conforme mostrado na resposta dessa operação.

    projects/PROJECT-ID/instances/INSTANCE-NAME/backups/BACKUP-NAME/operations/OPERATION-ID

    Substitua:

    • PROJECT-ID: o ID do projeto;
    • INSTANCE-NAME: o nome da instância.
    • BACKUP-NAME: o nome do backup.
    • OPERATION-ID: o ID das operações.

    Também é possível recuperar o nome da operação de backup listando operações de backup de longa duração.

  3. Clique em Executar.