Sunday, August 12, 2012

MySQL 5.5 ve PERFORMANCE_SCHEMA


Oracle firmasının Sun'ı satın alması ile birlikte sahip olduğu yazılımların sayısında bir artış oldu. Bu yazılımların en önemlilerinden biri MySQL'dir. MySQL, açık kaynak kodlu ilişkisel veritabanı uygulamaları arasında en yaygın olarak kullanılan veritabanı sunucusudur. Her ne kadar Oracle açık kaynak kod uygulama geliştiricilerle arası sorunlu olsa da MySQL'e yatırım yapmaya devam etti. Örneğin, Sun'dan devir aldığı OpenOffice, Hudson gibi açık kaynak kodlu projelerde, proje ekiplerini küstürmüş ve projeden ayrılmalarına neden olmuştur. Aynı durum kısmen MySQL için de geçerlidir. Ancak OpenOffice'de ve Hudson'da yaşanan durum MySQL'de yaşanmadı. Oracle MySQL'e yatırım yaptı ve geliştirmeye devam etti. Bunun arkasındaki neden, Oracle'ın Sun'ı satın almadan çok öncesinde Innobase firmasını satın almış olmasıdır. Innobase firması MySQL'deki  Depolama Motorlarından (=Storage Engine)  biri olan Innodb motorunun geliştiricisidir. Oracle, Innobase üzerinden, MySQL'e yatırım yapmaya ve MySQL'i geliştirmeye devam ediyor. 

Satın almadan sonraki ilk sürüm olan 5.5 ile çok sayıda yeni özellik geldi. Bunlardan biri de sunucunun davranışını ve performansını izlemeye olanak sağlayan performance_schema veritabanıdır. Sunucuyu başlattıktan sonra show databases komutu çalıştırıldığında, artık karşımıza performance_schema isimli yeni bir veritabanı çıkıyor:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| test               |
| world              |
+--------------------+
4 rows in set (0.00 sec)


 performance_schema veritabanıyla beraber [aynı isimli] yeni bir Depolama Motoru ile de tanışıyoruz: PERFORMANCE_SCHEMA. performance_schema içindeki tablolarda, veritabanında gerçekleşen olaylar ile ilgili bilgiler saklanıyor. Bu tablolar view ya da bellekte depolanan geçici tablo olarak tanımlı olduklarından kalıcı değillerdir. Şimdi bu tablolara bir göz atalım:

mysql> show tables;
+----------------------------------------------+
| Tables_in_performance_schema                 |
+----------------------------------------------+
| cond_instances                               |
| events_waits_current                         |
| events_waits_history                         |
| events_waits_history_long                    |
| events_waits_summary_by_instance             |
| events_waits_summary_by_thread_by_event_name |
| events_waits_summary_global_by_event_name    |
| file_instances                               |
| file_summary_by_event_name                   |
| file_summary_by_instance                     |
| mutex_instances                              |
| performance_timers                           |
| rwlock_instances                             |
| setup_consumers                              |
| setup_instruments                            |
| setup_timers                                 |
| threads                                      |
+----------------------------------------------+
17 rows in set (0.00 sec)

Tabloların isimleri ve içerikleri bir sürümden diğer sürüme değişiklik gösterebilir. Eğer kurulum sonrasında herhangi bir tanımlama yapılmaz ise sunucu sistemle ilgili anlık bilgileri bu tablolara kaydetmeye başlamaz. Sunucuyu ya aşağıdaki gibi diğer seçenekler yanında performance_schema seçeneği ile çalıştırmak gerekir

$ mysqld --performance_schema 

ya da bu özelliği kalıcı olarak açmak için yapılandırma dosyasına (my.cnf/my.ini) aşağıdaki satırı eklemek yeterli olacaktır:

[mysqld]
performance_schema
performance_schema_events_waits_history_size=20
performance_schema_events_waits_history_long_size=15000


Eğer sunucu doğru yapılandırılmış ise performance_schema sistem değişkeninin değeri ON olmalıdır:

 
mysql> SHOW VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | ON    |
+--------------------+-------+

Sunucuyu yeniden başlatmadan PERFORMANCE_SCHEMA motorunu etkinleştirmek için aşağıdaki komutu çalıştırmak yeterli olacaktır:

mysql> update performance_schema.setup_consumers set enabled='YES' where name='events_waits_current';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from performance_schema.setup_consumers;
+----------------------------------------------+---------+
| NAME                                         | ENABLED |
+----------------------------------------------+---------+
| events_waits_current                         | YES     |
| events_waits_history                         | YES     |
| events_waits_history_long                    | YES     |
| events_waits_summary_by_thread_by_event_name | YES     |
| events_waits_summary_by_event_name           | YES     |
| events_waits_summary_by_instance             | YES     |
| file_summary_by_event_name                   | YES     |
| file_summary_by_instance                     | YES     |
+----------------------------------------------+---------+
8 rows in set (0.00 sec)

 Benzer şekilde sunucuyu tekrar başlatmadan bu özelliği kapatmak için aşağıdaki komutu yazmak yeterli olacaktır:


mysql> update performance_schema.setup_consumers set enabled='NO' where name='events_waits_current';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from performance_schema.setup_consumers;
+----------------------------------------------+---------+
| NAME                                         | ENABLED |
+----------------------------------------------+---------+
| events_waits_current                         | NO      |
| events_waits_history                         | YES     |
| events_waits_history_long                    | YES     |
| events_waits_summary_by_thread_by_event_name | YES     |
| events_waits_summary_by_event_name           | YES     |
| events_waits_summary_by_instance             | YES     |
| file_summary_by_event_name                   | YES     |
| file_summary_by_instance                     | YES     |
+----------------------------------------------+---------+
8 rows in set (0.00 sec)








No comments:

Post a Comment