Aracılığıyla paylaş


Azure SQL Veritabanı'de Bellek İçi OLTP depolamasını izleme

Şunlar için geçerlidir: Azure SQL Veritabanı

Bellek İçi OLTP ile bellek için iyileştirilmiş tablolardaki ve tablo değişkenlerindeki veriler, bellek içi veriler için ayrılan veritabanı belleğinin bir bölümü olan Bellek İçi OLTP depolama alanında bulunur.

  • Premium (DTU) ve İş Açısından Kritik (sanal çekirdek) hizmet katmanlarındaki veritabanları ve elastik havuzlar Bellek İçi OLTP'yi destekler.
  • Hiper Ölçek hizmet katmanı, Bellek İçi OLTP nesnelerinin bir alt kümesini destekler, ancak bellek için iyileştirilmiş tablolar içermez. Daha fazla bilgi için bkz . Hiper Ölçek sınırlamaları.

Verilerin Bellek İçi OLTP depolama sınırına sığıp sığmadığını belirleme

Farklı hizmet hedeflerinin depolama büyük harflerini belirleyin. Her Premium ve İş Açısından Kritik hizmet hedefi en yüksek Bellek İçi OLTP depolama boyutuna sahiptir.

Bellek için iyileştirilmiş bir tablo için bellek gereksinimlerini tahmin etmek, SQL Server için Azure SQL Veritabanı ile aynı şekilde çalışır. Tahmin bellek gereksinimlerini gözden geçirin.

Tablo ve tablo değişken satırlarının yanı sıra dizinler de büyük harfe doğru sayılır. Buna ek olarak, ALTER TABLE deyimler tüm tablonun ve dizinlerinin yeni bir sürümünü oluşturmak için yeterli belleğe ihtiyaç duyar.

Üst sınıra ulaşıldıktan sonra ekleme ve güncelleştirme işlemleri başarısız olabilir. Bu noktada, belleği geri kazanmak için verileri silmeniz veya veritabanınızın veya elastik havuzunuzun hizmet amacını artırmanız gerekir. Daha fazla bilgi için bkz . Yetersiz bellek OLTP depolama durumları - Hatalar 41823 ve 41840.

İzleme ve uyarı

Azure portalında hizmet hedefi için depolama üst sınırının yüzdesi olarak Bellek İçi OLTP depolama kullanımını izleyebilirsiniz:

  1. SQL veritabanınızın Genel Bakış sayfasında İzleme sayfasında grafiği seçin. Ya da gezinti menüsünde İzleme'yi bulun ve Ölçümler'i seçin.
  2. Ölçüm ekle seçeneğini belirleyin.
  3. Temel'in altında Bellek içi OLTP Depolama yüzdesi ölçümünü seçin.
  4. Uyarı eklemek için Kaynak Kullanımı kutusunu seçerek Ölçüm sayfasını açın ve ardından Yeni uyarı kuralı'nı seçin. Ölçüm uyarısı kuralı oluşturmak için yönergeleri izleyin.

Veya bellek içi depolama kullanımını göstermek için aşağıdaki sorguyu kullanın:

SELECT xtp_storage_percent 
FROM sys.dm_db_resource_stats
ORDER BY end_time DESC;

Bellek İçi OLTP ile yetersiz bellek hatalarını çözme

Veritabanınızda veya elastik havuzunuzda Bellek İçi OLTP depolama sınırına ulaşmak, , UPDATEALTER ve CREATE deyimlerinin 41823 (tek veritabanları için) hatasıyla veya 41840 (elastik havuzlar için) hatasıyla başarısız olurINSERT. Her iki hata da etkin işlemin durdurulmasına neden olur.

41823 ve 41840 hataları, veritabanı veya elastik havuzdaki bellek için iyileştirilmiş tabloların ve tablo değişkenlerinin boyutunun Bellek İçi OLTP depolama boyutu üst sınırına ulaştığını gösterir.

Bu hataları çözmek için şunlardan birini yapın:

  • Verileri bellek için iyileştirilmiş tablolardan silip verileri geleneksel, disk tabanlı tablolara boşaltabilirsiniz; veya
  • Hizmet hedefini bellek için iyileştirilmiş tablolarda ve tablo değişkenlerinde tutmanız gereken veriler için yeterli Bellek İçi OLTP depolaması olan bir hedefe yükseltin.

Not

Nadir durumlarda, 41823 ve 41840 hataları geçici olabilir; bu da yeterli kullanılabilir Bellek İçi OLTP depolama alanı olduğu ve işlemin yeniden denenerek başarılı olduğu anlamına gelir. Bu nedenle hem genel kullanılabilir Bellek İçi OLTP depolama alanını izlemenizi hem de 41823 veya 41840 hatasını ilk kez karşılaştığınızda yeniden denemenizi öneririz. Yeniden deneme mantığı hakkında daha fazla bilgi için bkz . Bellek İçi OLTP ile Çakışma Algılama ve Mantığı Yeniden Deneme.

DMV’ler ile izleme

  • Bellek tüketimini proaktif olarak izleyerek, bellek tüketiminin nasıl büyüdüğünü ve kaynak sınırlarına doğru ne kadar boşluk bıraktığınızı belirleyebilirsiniz. Veritabanınızdaki veya örneğinizdeki nesneler tarafından ne kadar bellek tüketildiğini belirleyin. sys.dm_db_xtp_table_memory_stats veya sys.dm_os_memory_clerks DMV'leri kullanabilirsiniz.

    • sorgulayarak sys.dm_db_xtp_table_memory_statstüm kullanıcı tabloları, dizinler ve sistem nesneleri için bellek tüketimini bulabilirsiniz:

      SELECT object_name(object_id) AS [Name], *
      FROM sys.dm_db_xtp_table_memory_stats;
      
    • Bellek İçi OLTP altyapısına ayrılan bellek ve bellek için iyileştirilmiş nesneler, veritabanındaki diğer bellek tüketicileri ile aynı şekilde yönetilir. Bellek İçi OLTP altyapısına ayrılan tüm bellek için tür MEMORYCLERK_XTP hesabının bellek katipleri. Belirli veritabanlarına ayrılmış bellek de dahil olmak üzere Bellek İçi OLTP altyapısı tarafından kullanılan tüm belleği bulmak için aşağıdaki sorguyu kullanın.

      -- This DMV accounts for all memory used by the In-Memory OLTP engine
      SELECT [type], [name]
           , memory_node_id  
           , pages_kb/1024. AS pages_MB
      FROM sys.dm_os_memory_clerks 
      WHERE [type] LIKE '%xtp%';
      
      type                 name       memory_node_id pages_MB  
      -------------------- ---------- -------------- --------------------  
      MEMORYCLERK_XTP      Default    0              18  
      MEMORYCLERK_XTP      DB_ID_5    0              1358  
      MEMORYCLERK_XTP      Default    64             0  
      
  • Ayrıca, dinamik yönetim görünümü sys.dm_os_out_of_memory_events ile Azure SQL Veritabanı bellek yetersiz hataları hakkında daha fazla bilgi edinebilirsiniz. Örneğin:

    SELECT *
    FROM sys.dm_os_out_of_memory_events
    ORDER BY event_time DESC;