메모리 내 OLTP에 대한 SQL Server 관리 개체 지원
적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
이 항목에서는 메모리 내 OLTP를 지원하는 SMO(SQL Server Management Objects)의 항목에 대해 설명합니다.
SMO 형식 및 멤버
다음 형식 및 멤버는 Microsoft.SqlServer.Management.Smo 네임스페이스에 있으며 메모리 내 OLTP를 지원합니다.
- DurabilityType (열거형)
- FileGroup.FileGroupType(속성)
- 파일.FileGroup (생성자)
- FileGroupType (열거형)
- 인덱스.BucketCount (property)
- IndexType.NonClusteredHashIndex (열거형 멤버)
- 인덱스.IsMemoryOptimized (property)
- 서버.IsXTPSupported (property)
- StoredProcedure.IsNativelyCompiled(속성)
- StoredProcedure.IsSchemaBound(속성)
- 테이블.Durability (property)
- 테이블.IsMemoryOptimized (property)
- UserDefinedTableType.IsMemoryOptimized (property)
C# 코드 예제
컴파일된 코드 예제에서 참조하는 어셈블리
- Microsoft.SqlServer.ConnectionInfo.dll
- Microsoft.SqlServer.Management.Sdk.Sfc.dll
- Microsoft.SqlServer.Smo.dll
- Microsoft.SqlServer.SqlEnum.dll
코드 예제에서 수행한 작업
- 메모리 최적화 파일 그룹 및 메모리 최적화 파일을 사용하여 데이터베이스를 만듭니다.
- 기본 키, 비클러스터형 인덱스 및 비클러스터형 해시 인덱스가 있는 내구성 있는 메모리 최적화 테이블을 만듭니다.
- 열 및 인덱스를 만듭니다.
- 사용자 정의 메모리 최적화 테이블 형식을 만듭니다.
- 고유하게 컴파일된 저장 프로시저를 만듭니다.
소스 코드
using Microsoft.SqlServer.Management.Smo;
using System;
public class A {
static void Main(string[] args) {
Server server = new Server("(local)");
// Create a database with memory-optimized filegroup and memory-optimized file.
Database db = new Database(server, "MemoryOptimizedDatabase");
db.Create();
FileGroup fg = new FileGroup(
db,
"memOptFilegroup",
FileGroupType.MemoryOptimizedDataFileGroup);
db.FileGroups.Add(fg);
fg.Create();
// Change this path if needed.
DataFile file = new DataFile(
fg,
"memOptFile",
@"C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\MSSQLmemOptFileName");
file.Create();
// Create a durable memory-optimized table with primary key, nonclustered index and nonclustered hash index.
// Define the table as memory optimized and set the durability.
Table table = new Table(db, "memOptTable");
table.IsMemoryOptimized = true;
table.Durability = DurabilityType.SchemaAndData;
// Create columns.
Column col1 = new Column(table, "col1", DataType.Int);
col1.Nullable = false;
table.Columns.Add(col1);
Column col2 = new Column(table, "col2", DataType.Float);
col2.Nullable = false;
table.Columns.Add(col2);
Column col3 = new Column(table, "col3", DataType.Decimal(2, 10));
col3.Nullable = false;
table.Columns.Add(col3);
// Create indexes.
Index pk = new Index(table, "PK_memOptTable");
pk.IndexType = IndexType.NonClusteredIndex;
pk.IndexKeyType = IndexKeyType.DriPrimaryKey;
pk.IndexedColumns.Add(new IndexedColumn(pk, col1.Name));
table.Indexes.Add(pk);
Index ixNonClustered = new Index(table, "ix_nonClustered");
ixNonClustered.IndexType = IndexType.NonClusteredIndex;
ixNonClustered.IndexKeyType = IndexKeyType.None;
ixNonClustered.IndexedColumns.Add(
new IndexedColumn(ixNonClustered, col2.Name));
table.Indexes.Add(ixNonClustered);
Index ixNonClusteredHash = new Index(table, "ix_nonClustered_Hash");
ixNonClusteredHash.IndexType = IndexType.NonClusteredHashIndex;
ixNonClusteredHash.IndexKeyType = IndexKeyType.None;
ixNonClusteredHash.BucketCount = 1024;
ixNonClusteredHash.IndexedColumns.Add(
new IndexedColumn(ixNonClusteredHash, col3.Name));
table.Indexes.Add(ixNonClusteredHash);
table.Create();
// Create a user-defined memory-optimized table type.
UserDefinedTableType uDTT = new UserDefinedTableType(db, "memOptUDTT");
uDTT.IsMemoryOptimized = true;
// Add columns.
Column udTTCol1 = new Column(uDTT, "udtCol1", DataType.Int);
udTTCol1.Nullable = false;
uDTT.Columns.Add(udTTCol1);
Column udTTCol2 = new Column(uDTT, "udtCol2", DataType.Float);
udTTCol2.Nullable = false;
uDTT.Columns.Add(udTTCol2);
Column udTTCol3 = new Column(uDTT, "udtCol3", DataType.Decimal(2, 10));
udTTCol3.Nullable = false;
uDTT.Columns.Add(udTTCol3);
// Add index.
Index ix = new Index(uDTT, "IX_UDT");
ix.IndexType = IndexType.NonClusteredHashIndex;
ix.BucketCount = 1024;
ix.IndexKeyType = IndexKeyType.DriPrimaryKey;
ix.IndexedColumns.Add(new IndexedColumn(ix, udTTCol1.Name));
uDTT.Indexes.Add(ix);
uDTT.Create();
// Create a natively compiled stored procedure.
StoredProcedure sProc = new StoredProcedure(db, "nCSProc");
sProc.TextMode = false;
sProc.TextBody = "--Type body here";
sProc.IsNativelyCompiled = true;
sProc.IsSchemaBound = true;
sProc.ExecutionContext = ExecutionContext.Owner;
sProc.Create();
}
}
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기