none
SQL Server 2014 In-Memory OLTP功能請教 RRS feed

  • 問題

  • 各位好!

    在SQL Server 2014版本中,有一個新的In-Memory OLTP功能

    以下問題請教:

    1.在Enterprise Edition中要經由特殊設定才能啟用此功能?

    還是預設值就是啟用此功能而不用特殊設定?

    2.程式邏輯或語法方面需要配合調整嗎?

    感謝 :)

    2014年6月9日 上午 03:48

解答

所有回覆

  • 1. have to create special 'memory optimized data' file group in the db to use that feature, books online tells you how to do it.

    2. no code changes on client side.

    • 已標示為解答 DannyLee 2014年6月10日 上午 12:38
    2014年6月9日 下午 12:59
  • 1.In-Memory OLTP必須要企業版才有支援。

    http://msdn.microsoft.com/zh-tw/library/cc645993.aspx#Scalability

    使用方式可以參考這篇文章的範例,它會告訴您讓應用程式支援In-Memory OLTP所要做的步驟:

    http://msdn.microsoft.com/zh-tw/library/dn133079.aspx

    2.存取記憶體最佳化資料表使用的T-SQL和存取一般資料表並沒有什麼不同,但是要真正發揮In-Memory OLTP的威力,需要搭配原生編譯預存程序。有關移轉至In-Memory OLTP可以參考下列連結。

    http://msdn.microsoft.com/zh-tw/library/dn247639.aspx

    http://msdn.microsoft.com/zh-tw/library/dn133186.aspx

    http://msdn.microsoft.com/zh-tw/library/dn673538.aspx


    以上說明若有錯誤請指教,謝謝。

    | 台灣 SQL PASS 社群 | SQL PASS Taiwan

    | 歡迎參觀我的BLOG - 積沙成塔


    2014年6月9日 下午 01:01
    版主
  • 先感謝二位提供的資料~

    請問把資料直接放到Memory中會不會有資料遺失的風險?(雖然說主機應該會有UPS,而且不常有斷電或當機的情況發生)

    或是我對於此項新功能的認知有誤?

    還請各位指教,感謝 :)


    • 已編輯 DannyLee 2014年6月9日 下午 06:06
    2014年6月9日 下午 06:06
  • Yes, it's possible even sql will rebuild in-memory after sql restarting.
    2014年6月9日 下午 08:22
  • Yes, it's possible even sql will rebuild in-memory after sql restarting.

     Thanks ^^
    2014年6月10日 上午 12:39
  • 先感謝二位提供的資料~

    請問把資料直接放到Memory中會不會有資料遺失的風險?(雖然說主機應該會有UPS,而且不常有斷電或當機的情況發生)

    或是我對於此項新功能的認知有誤?

    還請各位指教,感謝 :)


    不知道下列的情境是否符合你的需求,就我所知,預設記憶體最佳化資料表的DURABILITY為SCHEMA_AND_DATA,資料和結構會被寫回硬碟,因此以下列T-SQL來實驗,當我執行完下列指令碼之後,把SQL Server停止在啟用,資料會被重新載入到記憶體,並沒有遺失的狀況發生,但如果你所說的斷電或當機的狀況,我倒是沒試驗過,以上供您參考,若有錯誤請指教,謝謝。

    USE master
    GO
    
    --建立資料庫
    IF EXISTS(select * from sys.databases where name = 'imoltp')
    	DROP DATABASE imoltp
    GO
    
    CREATE DATABASE imoltp 
    GO
    
    --啟用In-Memory OLTP
     ALTER DATABASE imoltp ADD FILEGROUP imoltp_mod CONTAINS MEMORY_OPTIMIZED_DATA 
     ALTER DATABASE imoltp ADD FILE (name='imoltp_file', filename='d:\db\imoltp_mod') TO FILEGROUP imoltp_mod 
     GO
    
     -- 建立記憶體最佳化資料表
     USE imoltp 
     GO
     
    -- 持久保存(預設) 
     CREATE TABLE dbo.ShoppingCart ( 
       ShoppingCartId int not null primary key nonclustered hash with (bucket_count=2000000), 
       UserId int not null index ix_UserId nonclustered hash with (bucket_count=1000000), 
       CreatedDate datetime2 not null, 
       TotalPrice money 
     ) 
     WITH (MEMORY_OPTIMIZED=ON) 
     --WITH (MEMORY_OPTIMIZED=ON,DURABILITY=SCHEMA_AND_DATA) 
     GO
    
      --插入測試資料
     insert into ShoppingCart values
     (1,1,getdate(),1),(2,2,getdate(),2)
     ,(3,3,getdate(),3),(4,4,getdate(),4)
     ,(22,22,getdate(),222),(33,33,getdate(),3333),(44,44,getdate(),4444)
    
     select *
     from ShoppingCart
    
    


    以上說明若有錯誤請指教,謝謝。

    | 台灣 SQL PASS 社群 | SQL PASS Taiwan

    | 歡迎參觀我的BLOG - 積沙成塔

    2014年6月10日 上午 01:02
    版主
  • 先感謝二位提供的資料~

    請問把資料直接放到Memory中會不會有資料遺失的風險?(雖然說主機應該會有UPS,而且不常有斷電或當機的情況發生)

    或是我對於此項新功能的認知有誤?

    還請各位指教,感謝 :)


    不知道下列的情境是否符合你的需求,就我所知,預設記憶體最佳化資料表的DURABILITY為SCHEMA_AND_DATA,資料和結構會被寫回硬碟,因此以下列T-SQL來實驗,當我執行完下列指令碼之後,把SQL Server停止在啟用,資料會被重新載入到記憶體,並沒有遺失的狀況發生,但如果你所說的斷電或當機的狀況,我倒是沒試驗過,以上供您參考,若有錯誤請指教,謝謝。

    USE master
    GO
    
    --建立資料庫
    IF EXISTS(select * from sys.databases where name = 'imoltp')
    	DROP DATABASE imoltp
    GO
    
    CREATE DATABASE imoltp 
    GO
    
    --啟用In-Memory OLTP
     ALTER DATABASE imoltp ADD FILEGROUP imoltp_mod CONTAINS MEMORY_OPTIMIZED_DATA 
     ALTER DATABASE imoltp ADD FILE (name='imoltp_file', filename='d:\db\imoltp_mod') TO FILEGROUP imoltp_mod 
     GO
    
     -- 建立記憶體最佳化資料表
     USE imoltp 
     GO
     
    -- 持久保存(預設) 
     CREATE TABLE dbo.ShoppingCart ( 
       ShoppingCartId int not null primary key nonclustered hash with (bucket_count=2000000), 
       UserId int not null index ix_UserId nonclustered hash with (bucket_count=1000000), 
       CreatedDate datetime2 not null, 
       TotalPrice money 
     ) 
     WITH (MEMORY_OPTIMIZED=ON) 
     --WITH (MEMORY_OPTIMIZED=ON,DURABILITY=SCHEMA_AND_DATA) 
     GO
    
      --插入測試資料
     insert into ShoppingCart values
     (1,1,getdate(),1),(2,2,getdate(),2)
     ,(3,3,getdate(),3),(4,4,getdate(),4)
     ,(22,22,getdate(),222),(33,33,getdate(),3333),(44,44,getdate(),4444)
    
     select *
     from ShoppingCart
    


    以上說明若有錯誤請指教,謝謝。

    | 台灣 SQL PASS 社群 | SQL PASS Taiwan

    | 歡迎參觀我的BLOG - 積沙成塔

     好的,我們測試看看 :)
    2014年6月10日 上午 01:12