Megosztás a következőn keresztül:


Memóriaoptimalizált táblák módosítása

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

A memóriaoptimalizált táblák séma- és indexmódosításai az ALTER TABLE utasítással végezhetők el. Az SQL Server 2016-ban és az Azure SQL Database ALTER TABLE műveletei a memóriaoptimalizált táblákon OFFLINE állapotban vannak, ami azt jelenti, hogy a tábla nem érhető el lekérdezésre, amíg a művelet folyamatban van. Az adatbázis-alkalmazás továbbra is futtatható, és a táblához hozzáférő összes művelet le lesz tiltva a módosítási folyamat befejezéséig. Egyetlen ALTER TABLE utasításban több ADD, DROP vagy ALTER műveletet is kombinálhat.

Fontos

A felügyelt Azure SQL-példány nem támogatja a memóriaoptimalizált táblákat az Általános célú szolgáltatásszinten.

ALTERNATÍV TÁBLÁZAT

Az ALTER TABLE szintaxis a táblaséma módosítására, valamint indexek hozzáadására, törlésére és újraépítésére szolgál. Az indexek a tábladefiníció részét képezik:

  • Csak a memóriaoptimalizált táblák esetében támogatott az ALTER TABLE ... ADD/DROP/ALTER INDEX szintaxis.

  • ALTER TABLE utasítás használata nélkül a CREATE INDEX, DROP INDEX, ALTER INDEX és PAD_INDEX utasítás nem támogatott a memóriaoptimalizált táblák indexeihez.

A következő típusú módosítások támogatottak:

  • A gyűjtők számának módosítása

  • Index hozzáadása és eltávolítása

  • Oszlop módosítása, hozzáadása és eltávolítása

  • Kényszer hozzáadása és eltávolítása

További információ az ALTER TABLE funkcióról és a teljes szintaxisról: ALTER TABLE (Transact-SQL)

Sémaalapú függőség

A natívan lefordított tárolt eljárásoknak sémaalapúnak kell lenniük, ami azt jelenti, hogy sémafüggők az általuk elért memóriaoptimalizált tábláktól és az általuk hivatkozott oszlopoktól. A sémaalapú függőség két entitás közötti kapcsolat, amely megakadályozza a hivatkozott entitás elvetését vagy inkompatibilis módosítását mindaddig, amíg a hivatkozó entitás létezik.

Ha például egy sémához kötött natívan lefordított tárolt eljárás a táblából származó c1 oszlopra hivatkozik, a c1 oszlopot nem lehet elvetni. Hasonlóképpen, ha létezik olyan eljárás, amely egy INSERT utasítást tartalmaz oszloplista nélkül (például INSERT INTO dbo.mytable VALUES (...)), így a tábla egyetlen oszlopa sem törölhető.

Az ALTER TABLE naplózása memóriaoptimalizált táblákon

A memóriaoptimalizált táblán a legtöbb ALTER TABLE-forgatókönyv már párhuzamosan fut, és az írások optimalizálását eredményezheti a tranzakciónaplóba. Az optimalizálás úgy érhető el, hogy csak a tranzakciónapló metaadatainak változásait naplózza. Az alábbi ALTER TABLE-műveletek azonban egyszálasak, és nem naplóoptimalizáltak.

Ebben az esetben az egyszálas művelet a módosított tábla teljes tartalmát naplózza a tranzakciónaplóba. Az egyszálas műveletek listája a következő:

  • Módosítsa vagy adjon hozzá egy oszlopot egy nagy objektumtípus (LOB) használatához: nvarchar(max), varchar(max) vagy varbinary(max).

  • OSZLOPCSOOPRTOS index hozzáadása vagy eltávolítása.

  • Szinte bármi, ami egy soron kívüli oszlopot érint.

    • A sorban lévő oszlopot áthelyezhetjük a sorközi pozícióból.
    • Soron kívüli oszlopot sorba helyez.
    • Hozzon létre egy új soron kívüli oszlopot.
    • Kivétel: A már soron kívüli oszlop hosszabbítását a rendszer optimalizált módon naplózza.

Példák

Az alábbi példa egy meglévő kivonatindex gyűjtőszámát módosítja. Ez újraépíti a kivonatindexet az új gyűjtőszámmal, míg a kivonatindex más tulajdonságai változatlanok maradnak.

ALTER TABLE Sales.SalesOrderDetail_inmem
       ALTER INDEX imPK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID  
              REBUILD WITH (BUCKET_COUNT=67108864);  
GO

Az alábbi példa egy NOT NULL kényszerű és ALAPÉRTELMEZETT definícióval rendelkező oszlopot ad hozzá, és a WITH VALUES függvény használatával adja meg a táblázat minden meglévő sorához tartozó értékeket. Ha a WITH VALUES nem használatos, minden sorban a NULL érték szerepel az új oszlopban.

ALTER TABLE Sales.SalesOrderDetail_inmem  
       ADD Comment NVARCHAR(100) NOT NULL DEFAULT N'' WITH VALUES;  
GO

Az alábbi példa egy elsődleges kulcskényszert ad hozzá egy meglévő oszlophoz.

CREATE TABLE dbo.UserSession (
   SessionId int not null,
   UserId int not null,
   CreatedDate datetime2 not null,
   ShoppingCartId int,
   index ix_UserId nonclustered hash (UserId) with (bucket_count=400000)
)
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_ONLY) ;  
GO  
  
ALTER TABLE dbo.UserSession  
       ADD CONSTRAINT PK_UserSession PRIMARY KEY NONCLUSTERED (SessionId);  
GO

Az alábbi példa eltávolít egy indexet.

ALTER TABLE Sales.SalesOrderDetail_inmem  
       DROP INDEX ix_ModifiedDate;  
GO

Az alábbi példa egy indexet ad hozzá.

ALTER TABLE Sales.SalesOrderDetail_inmem  
       ADD INDEX ix_ModifiedDate (ModifiedDate);  
GO  

Az alábbi példa több oszlopot ad hozzá indexekkel és korlátozásokkal.

ALTER TABLE Sales.SalesOrderDetail_inmem  
       ADD    CustomerID int NOT NULL DEFAULT -1 WITH VALUES,  
              ShipMethodID int NOT NULL DEFAULT -1 WITH VALUES,  
              INDEX ix_Customer (CustomerID);  
GO  

Lásd még:

Memory-Optimized táblák