Mysql “The table is full” hatası ve Max_data_length

mysql Yorum Ekle

Mysql myisam depolama motoru varsayılan olarak 32bit bir adresleme yaptığı için index dosyaları 4gb’dan daha büyük bir data (MYD dosyası) adresleyememektedir. Bu sorunu aşmak için tablo oluşturulurken verilecek olan ayarlarla adreslenecek data miktarının en fazla boyutu belirlenebilir. Tablo zaten var olan bir tablo ise alter table komutu ile tablonun oluşturma ayarları değiştirilebilir. Burada dikkat edilmesi gereken nokta ise alter table komutunun çalışması esnasında tüm indexler yeniden oluşturulacağı için komutun çalışma süresidir. Primary index dışında hiçbir indexi olmayan bir tabloda bu işlem 2 dakika civarında sürerken (4XOpteron,4X15K RPM SCSI,20GB RAM makina konfigürasyonu) index sayısına ve makinanın konfigürasyonuna bağlı olarak bu işlem saatlerce sürebilmektedir.

Eğer kullandığınız bir tabloda “The table is full” hatası alıyorsanız sorunu çözmek için öncelikle tablo yapısını incelemek için:

mysql> show table status like 'tablo' \G
*************************** 1. row ***************************
           Name: tablo
           Type: MyISAM
     Row_format: Dynamic
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 4294967295
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2003-03-03 00:43:43
    Update_time: 2003-03-03 00:43:43
     Check_time: 2003-06-14 15:11:21
 Create_options:
        Comment:
1 row in set (0.00 sec)

Dikkat ederseniz maksimum data boyutu Max_data_length 4gb. Bunu düzeltmek için

mysql> alter table tablo max_rows = 200000000000 avg_row_length = 50;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> show table status like 'tablo' \G
*************************** 1. row ***************************
           Name: tablo
           Type: MyISAM
     Row_format: Dynamic
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 1099511627775
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2003-06-17 13:12:49
    Update_time: 2003-06-17 13:12:49
     Check_time: NULL
 Create_options: max_rows=4294967295 avg_row_length=50
        Comment:
1 row in set (0.00 sec)

Şimdi mysql daha çok veri depolamamıza izin verecek.

Burada max_rows parametresi en fazla eklenebilecek kayıt sayısını, avg_row_length ise yaklaşık satır boyutunu belirtmektedir. Verdiğimiz rakamlar sonuçta gene bazı limitleri ifade etmektedir. Limitsiz hale getirmemektedir.

Dikkat edilmesi gereken bir diğer husus ise işletim sisteminin desteklediği maksimum dosya boyutudur. Bazı işletim sistemleri (örneğin solaris)  dosya boyutuna 4gb gibi bir sınır koymuş ise bu yapılan işlemler işe yaramayacaktır. Sistem planlaması esnasında bu tür konular gözönünde bulundurulmalıdır.

Yorum Yaz

  • Kategoriler

  • RSS İle Takip Edin

  • Favorilerinize Ekleyin

    Blograzzi Technorati
  • Son Yorumlar

  • Son Yazılar

  • Arşivler

  • Anket

    Hangi linux dağıtım(lar)ını kullanıyorsunuz?

    Sonuçları Göster

    Loading ... Loading ...
  • Reklam

    Pardus... Özgürlük İçin...

    Özgürlük İçin OOXML'e Karşı!

  • Lampforweb 2007 Tüm hakları saklıdır. Tema N.Design Studio
    İçerik RSS Yorum RSS Giriş