Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apa cara terbaik untuk menyegarkan tabel rollup di bawah beban?

Cara saya melakukan ini dalam beberapa proyek adalah dengan menggunakan dua salinan tabel dalam skema yang berbeda. Jadi sesuatu seperti:

CREATE SCHEMA fake WITH AUTHORIZATION dbo;
CREATE SCHEMA standby WITH AUTHORIZATION dbo;
GO

CREATE TABLE dbo.mySummary(<...columns...>);

CREATE TABLE fake.mySummary(<...columns...>);
GO

Sekarang buat prosedur tersimpan yang memotong dan mengisi ulang tabel palsu, lalu dalam transaksi pindahkan objek antar skema.

CREATE PROCEDURE dbo.SwapInSummary
AS
BEGIN
    SET NOCOUNT ON;

    TRUNCATE TABLE fake.mySummary;

    INSERT fake.mySummary(<...columns...>)
        SELECT <expensive query>;

    BEGIN TRANSACTION;
        ALTER SCHEMA standby TRANSFER dbo.mySummary;
        ALTER SCHEMA dbo     TRANSFER fake.mySummary;
        ALTER SCHEMA fake    TRANSFER standby.mySummary;
    COMMIT TRANSACTION;
END
GO

Ini mungkin waktu tersingkat yang Anda dapat membuat pengguna menunggu data baru di-refresh dan tanpa mengganggu mereka di tengah pembacaan. (Ada banyak masalah yang terkait dengan NOLOCK yang menjadikannya alternatif yang kurang diinginkan, meskipun harus diakui, mudah untuk dikodekan.) Untuk singkatnya/kejelasan saya telah mengabaikan penanganan kesalahan dll., dan saya juga harus menunjukkan bahwa jika Anda menggunakan skrip untuk menyinkronkan database Anda, pastikan Anda memberi nama batasan, indeks, dll. Sama di kedua tabel, jika tidak, Anda akan tidak sinkron separuh waktu. Di akhir prosedur, Anda dapat MEMOTONG tabel fake.MySummary baru, tetapi jika Anda memiliki ruang, saya ingin meninggalkan data di sana sehingga saya selalu dapat membandingkan dengan versi sebelumnya.

Sebelum SQL Server 2005 saya menggunakan sp_rename di dalam transaksi untuk mencapai hal yang persis sama, namun karena saya melakukan ini dalam pekerjaan, saya senang beralih ke skema, karena ketika saya melakukannya, peringatan yang tidak dapat ditekan dari sp_rename berhenti mengisi up log riwayat SQL Server Agent saya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana menemukan alasan kebuntuan di sql server ro14?

  2. Panggilan asinkron dari prosedur tersimpan SQL Server di C#

  3. Kesalahan pengaturan newsequentialid () default di sql server 2008

  4. Pemicu untuk memecat hanya jika suatu kondisi terpenuhi di SQL Server

  5. Properti dependen dalam ReferentialConstraint dipetakan ke kolom yang dihasilkan toko