Tüm Ürünler
Search
Belge Merkezi

Data Management:SQL inceleme ve optimizasyon önerilerini yapılandırma

Son Güncelleme:Oct 04, 2026

DMS, SQL inceleme ve optimizasyon önerilerini güvenlik ilkelerine entegre eder. SQL konsolunda veya veri değişiklikleri sırasında bu özellik, gönderdiğiniz SQL deyimlerini uyumluluk açısından inceler ve optimizasyon önerileri sunar. Değişiklikleri onaylamadan önce sorunlu SQL deyimlerini tespit edip çözmenize yardımcı olarak, deyimler çalıştırıldıktan sonra oluşabilecek potansiyel sorunları ve veritabanı hatalarını önler.

Ön koşullar

  • Sistem rolünüz DBA veya administrator olmalıdır. Daha fazla bilgi için bkz. Kullanıcı Yönetimi.

  • Bir güvenlik ilkesi oluşturmuş olmanız gerekir. Daha fazla bilgi için bkz. Güvenlik ilkesi oluşturma.

  • Veritabanı türü:

    • MySQL: RDS for MySQL, PolarDB for MySQL, MariaDB, PolarDB-X, AnalyticDB for MySQL veya diğer MySQL kaynakları

    • Oracle

    • PolarDB for PostgreSQL (Oracle Compatible)

    • OceanBase

Sistem eylemleri

DMS üç önceden tanımlanmış sistem eylemi sağlar:

  • must be improved: İfadeyi iyileştirmezseniz sistem işlemi otomatik olarak engeller ve bir bildirim görüntüler. Başlangıçtaki SQL inceleme kuralları arasında must be improved olarak ayarlanmış herhangi bir kural bulunmaz.

    Not

    SQL inceleme kuralları tarafından gerçekleştirilen kontrollerin listesi için bkz. Kontrol öğeleri.

    Örneğin, Tables must have a primary key kuralı must be improved olarak ayarlanırsa sistem, birincil anahtarı olmayan bir tablo oluşturan bir SQL deyiminin yürütülmesini engeller ve geliştiriciden deyimde doğrulamayı geçmesi için değişiklik yapmasını ister.

  • Potansiyel sorun: Bu durum, SQL deyimiyle ilgili bir sorunu gösterir ancak işlemi engellemez.

  • Önerilen iyileştirme: Bir iyileştirme önerilir ancak işlem engellenmez.

Farklı kontrol modlarında özellik desteği

DMS üç farklı kontrol modu sunar. Daha fazla bilgi için bkz. Kontrol Modları.


Özellik


Secure collaboration


Stable change


Flexible O&M


Kuralları etkinleştirme veya devre dışı bırakma


Desteklenir


Desteklenir


Desteklenir


Eylemleri yapılandırma


Desteklenir


Yapılandırılamaz


Yapılandırılamaz

Kural parametrelerini değiştirme

Bazı kurallar için bir tablodaki maksimum dizin veya sütun sayısı gibi parametreler belirtebilirsiniz.


Desteklenir


Desteklenir


Yapılandırılamaz

Açıklamaları yapılandırma

Bir kural için iş bağlamını yapılandırın.


Desteklenir


Yapılandırılamaz


Yapılandırılamaz

Yordam

Varsayılan olarak her güvenlik ilkesi bir dizi SQL inceleme kuralı içerir. Bu örnekte, A table must have a primary key kuralını must be improved olarak ayarlayarak yapılandırmayı nasıl özelleştireceğiniz gösterilmektedir.

  1. DMS 5.0 konsolunda oturum açın.

  2. Sol üst köşedeki 2023-01-28_15-57-17.png simgesinin üzerine gelin ve All Features > Security and disaster recovery (DBS) > Security Rules seçeneğini belirleyin.

    Not

    DMS konsolunu normal modda kullanıyorsanız üst gezinme çubuğundan Security and disaster recovery (DBS) > Security Rules seçeneğini belirleyin.

  3. Hedef güvenlik ilkesinin Actions sütununda Edit seçeneğine tıklayın.

    Not

    Flexible Management veya Stable Change modu için ayarları yapılandırmak üzere ilgili kontrol modunun sağındaki SQL audit optimization recommendations seçeneğine tıklayın.

  4. Details sayfasının sol gezinme bölmesinde SQL audit optimization recommendations seçeneğine tıklayın.

  5. A table must have a primary key kuralı için Actions sütunundaki Edit seçeneğine tıklayın.

    Not

    Tag (kuralın uygulandığı kapsam; DDL ve DML deyimlerini içerir), Action veya Status (etkin veya devre dışı) yanındaki 筛选按钮 simgesine tıklayarak kuralları hızlıca filtreleyebilirsiniz.

  6. Configure Rule Content iletişim kutusunda aşağıdaki parametreleri yapılandırın.

    Action için kullanılabilir değerler arasında potential issue ve suggested improvement de bulunur.

    Parametre

    Açıklama

    Action

    Action değerini must be improved olarak ayarlayın.

    Not

    Varsayılan olarak başlangıçta hiçbir kural must be improved olarak ayarlanmaz.

    Remarks

    İş bağlamı gibi kural için açıklamalar girin.

  7. OK seçeneğine tıklayın.

    Veri geliştirme, veri değişikliği ve SQL inceleme gibi sonraki görevlerde DMS, SQL deyimlerinizi yapılandırılan güvenlik ilkelerine göre kontrol eder.

    Bir deyim A table must have a primary key kuralını ihlal ederse sistem işlemi otomatik olarak engeller.

Kontrol öğeleri

  • SQL Specification Check aşağıdaki öğeleri içerir.

    Table schema definition

    Kontrol öğesi

    Uygulanabilir SQL

    Kural adı ve ID

    Veritabanı nitelikleri

    CREATE DATABASE

    Veritabanı oluşturma için karakter kümesini kısıtla: CREATE_DATABASE_LIMIT_CHARSET

    Tablo nitelikleri

    • CREATE TABLE

    • ALTER TABLE

    • Bir tablonun birincil anahtarı olmalıdır: TABLE_MUST_HAVE_PRIMARY_KEY

    • Bir tablonun açıklamaları olmalıdır: TABLE_MUST_HAVE_COMMENTS

    • Tablolarda foreign key kullanmayın: TABLE_FORBID_USE_FOREIGN_KEY

    • Tablo adları için büyük/küçük harf kullanımını kısıtla: TABLE_NAME_LIMIT_CHAR_CASE

    • Tablolar için depolama motorunu kısıtla: TABLE_LIMIT_STORE_ENGINE

    • Tablolar için partition kullanmayın: TABLE_FORBID_USE_PARTITION

    • Bir tablo belirli sütunlar içermelidir: TABLE_MUST_HAVE_SOME_COLUMN

    • Bir tablo belirli bir karakter kümesi kullanmalıdır: TABLE_MUST_USE_SOME_CHARSET

    • Bir tablo belirli bir collation kullanmalıdır: TABLE_MUST_USE_SOME_COLLATION

    • Tablo adları anahtar kelime olamaz: TABLE_NAME_FORBID_KEYWORD

    • Bir tablodaki dizin sayısını sınırla: TABLE_LIMIT_INDEX_COUNT

    • Bir tablodaki sütun sayısını sınırla: TABLE_LIMIT_COLUMN_COUNT

    • Bir tablo için başlangıç auto-increment değerini sınırla: TABLE_LIMIT_INIT_AUTO_INCREMENT

    • Birincil anahtar sütunu auto-increment olmalıdır: LIMIT_PRIMARY_COLUMN_AUTO_INCREMENT

    • View kullanmayın: TABLE_FORBID_USE_VIEW

    • Trigger kullanmayın: TABLE_FORBID_USE_TRIGGER

    • Event kullanmayın: TABLE_FORBID_USE_EVENT

    • Stored procedure kullanmayın: TABLE_FORBID_USE_STORED_PROCEDURE

    • Custom function kullanmayın: TABLE_FORBID_USE_CUSTOM_FUNCTION

    • Tablo karakter kümesini değiştirmek için ALTER TABLE CONVERT sözdizimini kullanın: MODIFY_CHARSET_USE_ALTER_TABLE_CONVERT

    Sütun nitelikleri

    • CREATE TABLE

    • ALTER TABLE

    • Sütun adları anahtar kelime olamaz: COLUMN_NAME_FORBID_KEYWORD

    • Sütun adları için büyük/küçük harf kullanımını kısıtla: COLUMN_NAME_LIMIT_CHAR_CASE

    • Bir sütun için karakter kümesi ayarlamayın: COLUMN_FORBID_SET_CHARSET

    • Sütunlar için belirli veri türlerini kullanmayın: COLUMN_FORBID_DATA_TYPES

    • Sütunların açıklamaları olmalıdır: COLUMN_MUST_HAVE_COMMENTS

    • char türü sütunların uzunluğunu sınırla: COLUMN_LIMIT_CHAR_LENGTH

    • varchar türü sütunların uzunluğunu sınırla: COLUMN_LIMIT_VARCHAR_LENGTH

    • Tüm sütunlar NOT NULL olarak ayarlanmalıdır: COLUMN_MUST_SET_NOT_NULL

    • Auto-increment sütununun adı ID olmalıdır: COLUMN_AUTO_INCREMENT_NAME_ID

    • Auto-increment sütunları unsigned olmalıdır: COLUMN_AUTO_INCREMENT_UNSIGNED

    • float veya double türlerini kullanmayın (bunun yerine decimal kullanın): COLUMN_FORBID_FLOAT_DOUBLE_TYPE

    • Her sütunun bir varsayılan değeri olmalıdır: EACH_COLUMN_NEED_DEFAULT_VALUE

    • Bir sütun için collation ayarlamayın: COLUMN_FORBID_SET_COLLATE

    • ALTER TABLE kullanırken sütunları yeniden adlandırmayın: ALTER_TABLE_FORBID_RENAME_COLUMN

    • ALTER TABLE kullanırken sütunları silmeyin: ALTER_TABLE_FORBID_DROP_COLUMN

    • ALTER TABLE kullanırken veri türlerini değiştirmeyin: ALTER_TABLE_FORBID_MODIFY_DATA_TYPE

    • ALTER TABLE ile eklenen yeni sütunlar nullable olmalıdır: ALTER_TABLE_ADD_COLUMN_NULLABLE

    • ALTER TABLE ile non-nullable bir sütun eklerken bir varsayılan değer belirtilmelidir: ALTER_ADD_NOT_NULL_COLUMN_NEED_DEFAULT

    • Nullable bir sütunu non-nullable olarak değiştirirken bir varsayılan değer belirtilmelidir: COLUMN_NULLABLE_TO_NOT_NEED_DEFAULT

    • enum türünü kullanmayın (bunun yerine tinyint veya char kullanın): COLUMN_FORBID_USE_ENUM_TYPE

    • Sütunlar için ZEROFILL niteliğini kullanmayın: COLUMN_DATA_TYPE_FORBID_ZEROFILL

    Dizin nitelikleri

    • CREATE TABLE

    • ALTER TABLE

    • Her dizin açıkça adlandırılmalıdır: INDEX_MUST_HAVE_CLEARLY_NAME

    • Unique dizinler için adlandırma desenini kısıtla: UNIQUE_INDEX_NAME_PATTERN

    • Ortak dizinler için adlandırma desenini kısıtla: COMMON_INDEX_NAME_PATTERN

    • Tek bir dizindeki sütun sayısını sınırla: INDEX_LIMIT_CONTAINS_COLUMNS

    • Birincil anahtardaki sütun sayısını sınırla: PRIMARY_LIMIT_CONTAINS_COLUMNS

    • Birincil anahtar sütunlarının veri türünü kısıtla: PRIMARY_LIMIT_COLUMN_DATA_TYPE

    • ALTER TABLE kullanırken birincil anahtarı silmeyin: ALTER_TABLE_FORBID_DROP_PRIMARY

    • ALTER TABLE kullanırken bir dizini silmeyin: ALTER_TABLE_FORBID_DROP_INDEX

    Data query

    Kontrol öğesi

    Uygulanabilir SQL

    Kural adı ve ID

    SELECT

    • SELECT

    • INSERT SELECT

    • Alt sorgular (UPDATE veya DELETE deyimlerinde iç içe geçmiş)

    • SELECT deyimleri bir WHERE yan tümcesi belirtmelidir: SELECT_SUGGEST_ASSIGN_WHERE

    • SELECT deyimlerinde ORDER BY RAND() kullanmayın: SELECT_FORBID_USE_ORDER_BY_RAND

    • SELECT deyimlerinde bir sabit üzerinde GROUP BY kullanmayın: SELECT_FORBID_GROUP_BY_CONST

    • SELECT deyimlerinde bir sabit üzerinde ORDER BY kullanmayın: SELECT_FORBID_ORDER_BY_CONST

    • SELECT deyimi farklı tablolar üzerinde GROUP BY veya ORDER BY kullanmamalıdır: SELECT_FORBID_GROUP_ORDER_BY_DISTINCT_TABLE

    • SELECT deyimlerinde birden çok sütunu farklı yönlerde sıralamak için ORDER BY kullanmayın: SELECT_FORBID_ORDER_BY_MULTI_COLUMN_RANK

    • SELECT deyimi: Bir ifade veya işlev üzerinde GROUP BY veya ORDER BY kullanmayın: SELECT_FORBID_GROUP_ORDER_BY_EXPR_OR_FUNCTION

    • SELECT deyimlerinde UNION kullanmayın: SELECT_FORBID_USE_UNION

    • Bir SELECT deyimine katılan tablo sayısını sınırla: SELECT_LIMIT_TABLE_JOIN_COUNT

    • SELECT deyimi LIMIT yan tümcesindeki offset boyutu sınırlaması: SELECT_CONFINE_LIMIT_MAX_OFFSET

    • SELECT deyimlerinde HAVING yan tümcesi kullanmayın: SELECT_FORBID_USE_HAVING

    WHERE yan tümcesi

    WHERE yan tümcesi içeren deyimler; örneğin SELECT, UPDATE, DELETE ve INSERT SELECT.

    • Bir WHERE yan tümcesinde dizinli sütunlara matematiksel veya işlevsel işlemler uygulamayın: WHERE_FORBID_INDEX_COLUMN_HAS_MATH

    • Bir WHERE yan tümcesindeki aramalarda başında joker karakter kullanmayın: WHERE_FORBID_BEFORE_WILDCARD_SEARCH

    • WHERE yan tümcesinde joker karakter içermeyen LIKE deyimlerini kontrol edin: WHERE_CHECK_LIKE_HAS_NOT_WILDCARD

    • Bir WHERE yan tümcesinde NOT IN veya NOT LIKE gibi negatif koşullar kullanmayın: WHERE_FORBID_USE_REVERSE_SEARCH

    • Bir WHERE yan tümcesinde bir IN yan tümcesindeki öğe sayısı sınırlaması: WHERE_LIMIT_IN_ITEM_MAX_COUNT

    • Bir WHERE yan tümcesinde sütunlarda örtük tür dönüşümlerini kontrol edin: WHERE_CHECK_COLUMN_IMPLICIT_TYPE_CONVERSION

    • Bir WHERE yan tümcesinde OR işleciyle bağlanan filtre koşullarını kontrol edin: WHERE_CHECK_OR_LINK_CONDITION

    Data change

    Kontrol öğesi

    Uygulanabilir SQL

    Kural adı ve ID

    Veri ekleme

    • INSERT SELECT

    • INSERT [IGNORE]

    • REPLACE

    • Bir INSERT deyimi bir sütun listesi belirtmelidir: ASSIGN_INSERT_COLUMN_NAME_LIST

    • INSERT sütun listesinde yinelenen sütun adları kullanmayın: INSERT_COLUMN_NAME_FORBID_DUPLICATE

    • Bir NOT NULL sütuna NULL değeri eklemeyin: NOT_NULL_COLUMN_FORBID_INSERT_NULL

    • Bir INSERT deyimindeki sütun listesi değerler listesiyle eşleşmelidir: INSERT_COLUMN_MUST_MATCH_VALUES

    • Tek bir INSERT VALUES deyimindeki toplam satır sayısını sınırla: LIMIT_INSERT_VALUES_TOTAL_ROWS

    • Bir INSERT deyiminde belirtilen tablo veya sütunun var olup olmadığını kontrol edin: INSERT_CHECK_TABLE_COLUMN_EXISTS

    • Ekleme deyimlerinde SYSDATE() işlevini kullanmayın: INSERT_FORBID_USE_SYSDATE_FUNCTION

    Veri güncelleme ve silme

    • UPDATE

    • DELETE

    • UPDATE veya DELETE deyimlerine katılan tablo sayısını sınırla: UPDELETE_LIMIT_TABLE_JOIN_COUNT

    • UPDATE veya DELETE deyimleri bir WHERE yan tümcesi belirtmelidir: UPDELETE_ASSIGN_WHERE_CONDITION

    • UPDATE veya DELETE deyimlerinde WHERE yan tümcesinin alt sorgu içerip içermediğini kontrol edin: UPDELETE_CHECK_WHERE_EXIST_SUB_QUERY

    • UPDATE veya DELETE deyimlerinde LIMIT kullanarak etkilenen satır sayısını sınırla: UPDELETE_CHECK_LIMIT_AFFECTED_ROWS

    • UPDATE veya DELETE deyimleri için çoklu tablo birleştirme sözdiziminin eksiksiz olup olmadığını algılar (örneğin, bir join yan tümcesinden bir on yan tümcesi eksiktir): UPDELETE_CHECK_TABLE_JOIN_LOSS_ON

    • UPDATE veya DELETE deyimlerinde ORDER BY yan tümcesi içermeyin: UPDELETE_FORBID_ORDER_BY

    • UPDATE deyimi kontrolü: Birden çok sütun arasında SET ayırıcısı (and geçersizdir): UPDATE_CHECK_SET_ITEM_DELIMITER

    • Çoklu tablo üzerinde UPDATE: SET yan tümcesindeki sütunların tablo önekiyle belirtilip belirtilmediğini kontrol eder: UPDATE_MULTI_TABLE_CHECK_SET_COLUMN_PREFIX

    • Bir UPDATE deymindeki tabloların veya sütunların var olup olmadığını kontrol edin: UPDATE_CHECK_TABLE_COLUMN_EXIST

    • Bir UPDATE deyminin birincil anahtarı değiştirip değiştirmediğini kontrol edin: UPDATE_CHECK_PRIMARY_KEY_CHANGE

    • Bir UPDATE deyminin unique key'i değiştirip değiştirmediğini kontrol edin: UPDATE_CHECK_UNIQUE_KEY_CHANGE

    • Bir UPDATE deyimi tablonun "değiştirilme zamanı" sütununu da güncellemelidir: UPDATE_ALSO_TO_UPDATE_MODIFY_TIME_COLUMN

    • Bir UPDATE deyminde tablonun "oluşturulma zamanı" sütununu güncellemeyin: UPDATE_FORBID_MODIFY_CREATE_TIME_COLUMN

  • SQL Optimizasyon Önerileri aşağıdaki kontrol öğelerini içerir.

    Kategori

    Kontrol öğesi

    Yok

    • Birincil anahtarı int türünde olan tabloları optimize edin: OPTIMIZE_PRIMARY_IS_INT_TABLE

    • Auto-increment birincil anahtarlar için kalan alanın yetersiz olması konusunda uyar: SNIFFING_AUTO_PRIMARY_REMAIN_SPACE

    • Unique key'de (UK) NULL değeri riski konusunda uyar: SNIFFING_UNIQUE_EXIST_NULL_RISK

    • DDL tablo kilitlemeleri veya değişiklik hataları konusunda uyarı ve optimizasyon: ALTER_LOCK_FAIL_SNIFFING_OPTIMIZE

    • SQL enjeksiyon risklerini algıla: CHECK_SQL_INJECTION_RISK

    • Zorunlu dizin (FORCE INDEX) kullanımından kaynaklanan riskleri algıla: CHECK_SQL_ASSIGN_FORCE_INDEX

    • Yürütme planındaki dizini kontrol et: SQL_EXPLAIN_INDEX_CHECK

    • DMS dizin analizi ve öneriler: DMS_INDEX_ANALYZE_AND_SUGGEST