Ringkasan pra-pemisahan

Dokumen ini berisi informasi untuk membantu Anda memisahkan database terlebih dahulu.

Spanner mengelola pemisahan database dan penskalaan sebagai respons terhadap perubahan beban dan ukuran. Pemisahan dan penggabungan bersifat dinamis, berdasarkan traffic. Saat pemisahan menerima lebih banyak traffic, Spanner membaginya menjadi rentang yang lebih kecil dan mendistribusikan ulang pemisahan yang dihasilkan ke resource lain yang tersedia di instance. Spanner menggabungkan pemisahan saat pemisahan secara konsisten menerima lebih sedikit traffic.

Pemisahan tidak dilakukan secara instan. Jika pemisahan dan penyeimbangan ulang tidak dapat mengimbangi traffic, pemisahan berpotensi menggunakan resource komputasi dan memori yang tersedia. Jika hal ini terjadi, penjadwal kerja Spanner akan mengantrekan permintaan lebih lanjut, sehingga meningkatkan latensi dan berpotensi menyebabkan waktu tunggu habis serta transaksi yang dibatalkan.

Dengan memisahkan database di awal, Spanner dapat siap untuk meningkatkan traffic yang dapat diprediksi. Anda dapat memisahkan database terlebih dahulu dengan membuat titik terpisah.

Pertimbangkan untuk melakukan pra-pemisahan database dalam skenario berikut:

  • Anda memuat set data besar ke dalam tabel dan indeks baru di database Spanner untuk pertama kalinya, seperti pemuatan massal satu kali.
  • Anda memperkirakan adanya peningkatan beban traffic di database Spanner yang ada dalam waktu dekat. Misalnya, Anda mungkin perlu mendukung peristiwa traffic besar seperti peluncuran produk atau kampanye penjualan.

Menentukan jumlah pemisahan

Sebaiknya buat 10 titik bagi per node. Karena Spanner dapat membagi dan menyesuaikan traffic ke traffic dengan cepat untuk instance yang lebih kecil, Anda tidak perlu memisahkan instance yang lebih kecil terlebih dahulu.

Menentukan titik pemisahan

Pertimbangkan hal berikut saat menentukan titik bagi database:

  • Jika traffic Anda didistribusikan secara merata di seluruh rentang kunci, seperti saat menggunakan UUID atau kunci urutan yang dibalik bit, pilih titik pemisahan yang membagi ruang kunci traffic pasca secara merata.

  • Jika traffic Anda terkonsentrasi pada sekumpulan rentang kunci yang diketahui, pisahkan dan pisahkan rentang kunci tersebut.

  • Jika Anda mengharapkan traffic pada indeks, gunakan titik pemisahan pada indeks yang sesuai.

  • Tabel berselisih dibagi jika titik pemisahan ditambahkan ke tabel induk. Jika Anda mengharapkan traffic yang lebih tinggi pada tabel sisipan, pastikan untuk menggunakan titik pemisahan dalam tabel sisipan yang sesuai.

  • Anda dapat mengalokasikan titik pemisahan ke objek skema secara proporsional sesuai dengan peningkatan traffic-nya.

Contoh alur kerja untuk menentukan titik pemisahan

Asumsikan database Anda memiliki struktur tabel yang ditentukan oleh DDL berikut:

CREATE TABLE UserInfo (
 UserId INT64 NOT NULL,
 Info BYTES(MAX),
) PRIMARY KEY (UserId);


CREATE TABLE UserLocationInfo (
 UserId INT64 NOT NULL,
 LocationId STRING(MAX) NOT NULL,
 ActivityData BYTES(MAX),
) PRIMARY KEY (UserId, LocationId), INTERLEAVE IN PARENT UserInfo ON DELETE CASCADE;


CREATE INDEX UsersByLocation ON UserLocationInfo(LocationId);

UserId adalah hash yang dibuat secara acak dalam ruang INT64, dan Anda harus menambahkan 100 titik pemisahan untuk mendistribusikan perkiraan peningkatan traffic yang diharapkan pada tabel UserInfo dan tabel interleaf-nya. Karena titik pemisahan didistribusikan secara merata, Anda perlu menemukan jumlah baris, atau offset di antara setiap titik pemisahan:

offset = nilai maksimum rentang UserId / 99

Kemudian, titik pemisahan untuk tabel UserInfo ditentukan dari baris pertama UserId, atau UserId_first. Untuk menentukan titik bagi ke-N, gunakan kalkulasi berikut:

Titik bagi N: UserId_first + (offset * (N-1))

Misalnya, titik pemisahan pertama adalah UserId_first + (offset * 0) dan titik pemisahan ketiga adalah UserId_first + (offset * 2).

Karena tabel UserLocationInfo adalah tabel sisipan dari tabel UserInfo, tabel tersebut juga dibagi pada batas UserId. Anda mungkin juga ingin membuat titik pemisahan dalam tabel UserLocationInfo di kolom LocationId.

Perhatikan bahwa LocationId mengikuti format $COUNTRY_$STATE_$CITY_$BLOCK_$NUMBER, misalnya, US_CA_SVL_MTL_1100_7.

Untuk UserId, berdasarkan awalan string LocationId, Anda dapat menentukan pemisahan guna menempatkan tabel UserLocationInfo untuk UserId di 3 negara yang berbeda dalam 3 pemisahan yang berbeda:

  • Titik bagi 1: (1000, "CN")
  • Titik pemisahan 2: (1000, "FR")
  • Poin pemisahan 3: (1000, "AS")

Anda dapat menambahkan titik pemisahan baru hanya dengan menggunakan awalan dan tidak perlu mencocokkan format yang ditentukan untuk kolom atau indeks. Dalam contoh ini, titik pemisahan tidak cocok dengan format yang ditentukan untuk LocationId, dan hanya menggunakan $COUNTRY sebagai awalan.

Jika ingin membagi indeks UsersByLocation, Anda dapat menyebarkan titik pemisahan secara merata pada kolom LocationId, atau mengisolasi beberapa nilai kolom LocationId yang diperkirakan akan menerima peningkatan traffic:

  • Titik pemisahan 1: "CN"
  • Poin pemisahan 2: "US"
  • Poin pemisahan 3: "US_NYC"

Anda dapat membagi indeks lebih lanjut dengan menggunakan bagian kunci tabel yang diindeks untuk lokasi yang menerima lebih banyak peningkatan traffic. Misalnya, jika Anda mengharapkan lokasi CN menerima peningkatan traffic, Anda dapat memperkenalkan titik pemisahan berikut:

  • Titik pemisahan 1: "CN" dan TableKey: (1000, "CN")
  • Titik pemisahan 2: "CN" dan TableKey: (2000, "CN")
  • Titik pemisahan 3: "CN" dan TableKey: (3000, "CN")

Akhir masa berlaku titik bagi

Anda dapat menyetel waktu habis masa berlaku untuk setiap titik pemisahan. Bergantung pada kasus penggunaan Anda, tetapkan titik pemisahan agar masa berlakunya berakhir setelah perkiraan peningkatan traffic berkurang.

Waktu habis masa berlaku default adalah 10 hari sejak pemisahan dibuat atau diperbarui. Waktu habis masa berlaku maksimum yang diizinkan adalah 30 hari sejak Anda membuat atau memperbarui pemisahan.

Setelah pemisahan berakhir, Spanner akan mengambil alih pengelolaan pemisahan dan Anda tidak dapat lagi melihat pemisahan tersebut. Spanner mungkin menggabungkan pemisahan, bergantung pada traffic.

Anda juga dapat memperbarui waktu habis masa berlaku untuk titik pemisah sebelum masa berlakunya habis. Misalnya, jika peningkatan traffic belum mereda, Anda dapat memperpanjang waktu habis masa berlaku pemisahan. Jika tidak lagi memerlukan titik pemisah, Anda dapat menetapkannya agar segera berakhir masa berlakunya. Untuk mempelajari cara menetapkan waktu habis masa berlaku titik bagi, lihat Cara mengakhiri masa berlaku titik pemisahan.

Hasil dari pemisahan database di awal

Hasil berikut mungkin muncul setelah menambahkan titik bagi:

  • Perubahan latensi: Menambahkan titik pemisahan adalah cara untuk menyimulasikan peningkatan traffic di database. Jika database memiliki lebih banyak bagian, mungkin ada peningkatan permanen pada latensi baca dan tulis karena adanya lebih banyak peserta transaksi dan bagian kueri. Anda juga dapat memperkirakan peningkatan penggunaan komputasi dan kueri per permintaan baca atau tulis.

  • Efisiensi titik pemisahan: Untuk menentukan apakah titik pemisahan yang ditambahkan bermanfaat, pantau profil latensi untuk perubahan minimal, dan visualizer utama untuk hotspot. Jika melihat hotspot, Anda dapat langsung mengakhiri masa berlaku dan membuat titik terpisah baru. Untuk mengetahui informasi selengkapnya tentang titik pemisahan yang masa berlakunya akan berakhir, lihat Cara mengakhiri masa berlaku titik pemisahan. Pertimbangkan untuk memasukkan lebih sedikit bagian pada iterasi berikutnya dari penambahan pemisahan dan amati profil latensi.

  • Perilaku titik pemisahan setelah peningkatan traffic: Titik pemisahan yang ditambahkan harus dihapus setelah peningkatan traffic stabil. Distribusi terpisah mungkin tidak menyatu ke tempatnya sebelum beban meningkat. Database mungkin akan menetap di profil latensi yang berbeda karena perubahan traffic dan pemisahan yang diperlukan untuk mendukung traffic.

Contoh kasus penggunaan

Pertimbangkan bahwa Anda adalah administrator database di perusahaan game dan mengantisipasi peningkatan traffic untuk peluncuran game baru. Anda mengharapkan traffic pada tabel baru yang kosong.

Anda harus memastikan tidak ada gangguan layanan saat traffic masuk, sehingga tidak ada dampak yang dapat diamati pada tingkat latensi atau error.

Pertimbangkan strategi pra-pemisahan tingkat tinggi berikut untuk kasus penggunaan ini:

  1. Identifikasi jumlah node yang diperlukan instance untuk mendukung peningkatan traffic. Untuk mempelajari cara mengidentifikasi jumlah node, lihat Ringkasan performa. Jika Anda menggunakan autoscaler, tetapkan parameter batas maksimum ke jumlah node yang Anda identifikasi. Selain itu, tetapkan parameter batas minimum ke (jumlah node yang Anda identifikasi / 5).

  2. Identifikasi tabel dan indeks yang memiliki traffic terbanyak dan dapat mendapatkan manfaat terbesar dari penggunaan titik pemisahan. Lakukan analisis data saat ini dan pilih antara menggunakan titik pemisahan kustom atau titik pemisahan yang didistribusikan secara merata.

  3. Buat titik pemisahan tidak lebih awal dari tujuh hari dan tidak lebih dari 12 jam sebelum perkiraan peningkatan traffic.

  4. Pastikan pemisahan telah dibuat. Untuk melihat titik pemisahan yang dibuat pada instance, baca bagian Melihat titik pemisahan.

Peringatan

Pertimbangkan peringatan berikut saat membuat titik bagi:

  • Penghapusan tabel, indeks, dan database: Sebelum menghapus tabel, indeks, atau database, Anda harus memastikan semua titik pemisahan tambahan yang terkait sudah tidak berlaku. Anda dapat melakukannya dengan menyetel tanggal habis masa berlaku terpisah ke waktu saat ini. Hal ini diperlukan agar kuota tingkat instance dapat diklaim kembali. Untuk mengetahui informasi selengkapnya tentang titik pemisahan yang akan habis masa berlakunya, lihat Cara mengakhiri masa berlaku titik pemisahan.

  • Pencadangan dan pemulihan database: Pemisahan yang ditambahkan tidak dicadangkan. Anda perlu membuat bagian pada database yang dipulihkan.

  • Penskalaan otomatis asimetris: Jika Anda menggunakan penskalaan otomatis asimetris, jumlah node yang digunakan untuk menentukan jumlah titik pemisahan adalah jumlah node minimum di semua region.

  • Peningkatan sementara dalam metrik penggunaan penyimpanan: Menambahkan titik terpisah akan meningkatkan metrik total penyimpanan database untuk sementara hingga Spanner selesai pemadatan. Untuk mengetahui informasi selengkapnya, lihat Pemanfaatan penyimpanan. Hal ini hanya terjadi jika rentang kunci yang ada dibagi lebih lanjut, dan bukan ketika rentang kunci baru dibagi.

  • Anda harus membuat titik pemisahan tidak lebih awal dari tujuh hari dan tidak lebih dari 12 jam sebelum traffic yang diperkirakan meningkat.

Batas pra-pemisahan

Pra-pemisahan database Anda memiliki batasan berikut:

  • Anda tidak dapat memisahkan indeks penelusuran terlebih dahulu. Anda hanya perlu memisahkan tabel dasar terlebih dahulu. Untuk mengetahui informasi selengkapnya, lihat Sharding indeks penelusuran.

  • Anda tidak dapat memisahkan indeks vektor terlebih dahulu. Untuk mengetahui informasi selengkapnya tentang indeks vektor, lihat Indeks vektor.

  • Untuk mempelajari kuota titik pemisahan, lihat Kuota dan batas.

Apa langkah selanjutnya?