MySQL veritabanı tablosundaki maksimum kayıt sayısı


174

MySQL veritabanı tablosu için kayıtların üst sınırı nedir? Autoincrement alanını merak ediyorum. Milyonlarca kayıt eklersem ne olur? Bu tür durumlarla nasıl başa çıkılır? Teşekkürler!


16
1.21 GIGAWATTS'den bahsetmiyorum bile!
Ben

2
En azından bellek hizmet veriyorsa, sınır depolama motoru tarafından ayarlanır, bu nedenle (örneğin) MyISAM kullanarak InnoDB'yi kullanmaktan farklı bir sınır elde edersiniz.
Jerry Coffin

77
@ Soğan-Şövalye: Katılmıyorum. Tek bir tabloya milyonlarca satır eklemek normaldir ve bazı veritabanlarının bir sınırı vardır, bu yüzden sormaya değer. Birisi MySQL'in milyonlarca tabloyu destekleyip desteklemediğini sorarsa , bu muhtemelen mimari bir gafın işaretidir.
Bill Karwin

Yanıtlar:


61

mysql int türleri birkaç satır yapabilir: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

işaretsiz inten büyük değer 4,294,967,295
işaretsiz biginten büyük değer18,446,744,073,709,551,615


8
Maksimum 2147483647, yalnızca birden fazla milyarlarca girişle çalışıyorsanız otomatik eklemeyi büyük yapmak zorunda mısınız? (muhtemelen seçtikten sonra
seçimlerinizi

2
@ İmzalı int için olan Thalvak, lütfen mysql belgelerini okuyun.
Leandro

8
Sorunun bağlamı, otomatik artış alanının diğer kaynakların
KM)

21
Poster sayısal veya başka herhangi bir veri türü sormuyor. . Bunun doğru bir cevap olarak nasıl işaretlenebileceğini gerçekten anlamıyorum. Sorunun belirsiz olduğunu itiraf etmeliyim, ancak PK veri türü ve bir tablo için maksimum satır sayısını ayırt etmeliyiz.
Bery

1
@Bery, OP bunu cevap olarak seçerek daha sonra olduklarını ayırt etti. Görünüşe göre, cevabımın kapsadığı otomatik artış alanının kapasitesi ile ilgileniyorlardı ve diğer kaynakların sınırlamaları ile ilgilenmiyorlardı.
KM.

238

Bir tam sayının en büyük değerinin, bir tabloda depolayabileceğiniz maksimum satır sayısıyla ilgisi yoktur.

Birincil anahtarınız olarak int veya bigint kullanıyorsanız, birincil anahtarınızın veri türünde benzersiz değerlerin sayısı kadar çok satırınız olabilir, ancak birincil anahtarınızı bir tamsayı yapmak zorunda değilsiniz. , CHAR (100) yapabilirsiniz. Birincil anahtarı birden fazla sütun üzerinde de bildirebilirsiniz.

Tablo boyutunda satır sayısının yanı sıra başka kısıtlamalar da vardır. Örneğin, dosya boyutu sınırlaması olan bir işletim sistemi kullanabilirsiniz. Veya her satır 1 KB boyutundaysa, yalnızca 300 milyon satır depolayabilen 300 GB'lık bir sabit sürücünüz olabilir.

Veritabanı boyutunun sınırları gerçekten yüksek:

http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html

MyISAM depolama motoru tablo başına 2 32 satırı destekler , ancak MySQL'i tablo başına 2664 satıra --with-big-tableskadar destekleme seçeneğiyle oluşturabilirsiniz .

http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html

InnoDB depolama motorunun satır sayısı üzerinde bir sınırı yok gibi görünüyor, ancak 64 terabaytlık tablo boyutunda bir sınırı var. Buna kaç satır sığdığı her satırın boyutuna bağlıdır.


62
bok - keşke daha önce bunu okumak isterdim ... Ben sadece benim tablolardan birinde benim 64 terrabyte boyutu aştı ve şimdi benim sistem çok yavaş!
JM4

2 ^ 32 = 4.294.967.295 ve 2 ^ 64 = 18.446.744.073.709.551.615 Böylece ... En büyük tamsayı değerinin, maksimum satır sayısıyla ilgisi vardır. Ana anahtar olması gerekmez.
teynon

1
@Tom, InnoDB, MySQL 5.5'teki varsayılan depolama motorudur ve vakaların% 99'unda daha iyi bir seçimdir.
Bill Karwin

2
@ Ext3h, Sfenks Arama genellikle MyISAM veya InnoDB'deki tam metin dizinlerinden daha iyi bir seçimdir.
Bill Karwin

1
MySQL 8 için sınır sayfa boyutu 64 KB olan 256 TB'dir.
UselesssCat

13

Asla veri silmemeyi öneririm. Tablolar 1000'den uzunsa tablonun sonunu kesmeyin. Planınızda, bu kullanıcının ne kadar süre işlem yapmadığı gibi gerçek bir iş mantığı olmalıdır. Örneğin, 1 yıldan uzunsa, onları farklı bir masaya koyun. Bu, yavaş bir zamanın ortasında bir bakım betiğinde haftalık veya aylık olarak gerçekleşir.

Tablonuzdaki birçok satıra rastladığınızda, tabloları parçalamaya veya bölümlere ayırmaya başlamalı ve users_2011_jan, users_2011_feb gibi eski verileri yıllara göre eski tablolara koymalı veya ay için sayıları kullanmalısınız. Ardından, bu modelle çalışacak şekilde programlamanızı değiştirin. Verileri daha az sütun halinde özetlemek için daha az bilgi içeren yeni bir tablo oluşturun ve daha sonra yalnızca kullanıcının profilini görüntüler gibi daha fazla bilgiye ihtiyacınız olduğunda daha büyük bölümlenmiş tablolara bakın. Tüm bunlar çok dikkatli bir şekilde düşünülmelidir, bu nedenle gelecekte yeniden faktör oluşturmak çok pahalı değildir. Ayrıca yalnızca sitenize her zaman gelen kullanıcıları tek bir tabloya ve asla arşivlenmiş bir tablo kümesine gelmeyen kullanıcıları koyabilirsiniz.


1
Bu bağlamda, MySQL bölümlemesine bakmak çok yararlıdır: dev.mysql.com/doc/refman/5.6/en/partitioning.html
Wim Deblauwe

10

InnoDB'de, tablo boyutu 64 terabayt ve MySQL satır boyutu sınırı 65,535 olan 1.073.741.824 satır olabilir. Bu, maksimum satır boyutu sınırını kullanan minimum kayıt sayısıdır. Ancak, satır boyutu daha küçükse daha fazla kayıt eklenebilir.


65535 satır sınırına sahip bu çok sayıda (1.073.741.824) satırı depolamak için ne kadar sabit disk boyutu gerekir? lütfen önermek
davidb

1
Gereken sabit disk boyutu, yalnızca satır sayısına ve satır boyutuna göre belirlenemez. Tablo boyutunun kendisi 64 terabayt olacaktır. Ancak, TEXT ve BLOB sütunlarının verileri satırdan ayrı olarak saklanır ve ek alana ihtiyaç duyar. Ayrıca, boyut türe bağlı olarak değiştiği için METİN ve BLOB sütunlarının sayısına ve türüne bağlı olacaktır. TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT olmak üzere dört tür METİN sütunu vardır. Ayrıca TINYBLOB, MEDIUMBLOB, BLOB ve LONGBLOB olmak üzere dört tip BLOB sütunu vardır.
Xylo

2

Http://dev.mysql.com/doc/refman/5.6/en/features.html , Ölçeklenebilirlik ve Sınırlar bölümüne göre , büyük veritabanları için MySQL desteği. MySQL Server'ı 50 milyon kayıt içeren veritabanlarıyla kullanıyorlar. Bazı kullanıcılar 200.000 tablo ve yaklaşık 5.000.000.000 satır içeren MySQL Server kullanır.


bize ne tür donanım "Onlar" kullandığını da bildirirseniz yardımcı olabilir
my account_ram

Gerçekten, haklısın. Ama ne yazık ki 'onlar' donanım hakkında hiçbir şey yapmadı
Data

@myaccount_ram bu necromance için üzgünüm, ama onun yararlı eğer eylem MySQL daha az teorik, daha pratik üretim limitleri gördük. 2x db.r4.16xlarge AWS örneklerinde (1 okuyucu, 1 yazar) ~ 18 milyar satırlık bir veritabanı gördüm. Makinelerin her birinde 64 CPU çekirdeği, 488GB ram, 25Gbps ağ bağlantısı, 64 TB disk vardı. Bu db ölçeği hem CPU hem de disk boyutu sınırlarını zorluyordu ve AWS daha büyük DB için optimize edilmiş örnekler sağlamaz. Çok sayıda satır gerektirmeyen daha basit bir db şeması ile değiştirildi.
Skylar Brown

1

Satır Boyutu Sınırları

The maximum row size for a given table is determined by several factors:
  • Bir MySQL tablosunun dahili gösterimi, depolama motoru daha büyük satırları destekleyebilse bile maksimum 65.535 bayt sınırına sahiptir. BLOB ve TEXT sütunları, içerikleri satırın geri kalanından ayrı olarak depolandığından, satır boyutu sınırına yalnızca 9 ila 12 bayt katkıda bulunur.

  • Veritabanı sayfasında yerel olarak depolanan veriler için geçerli olan InnoDB tablosu için maksimum satır boyutu, sayfanın yarısından biraz daha küçüktür. Örneğin, innodb_page_size yapılandırma seçeneği tarafından tanımlanan varsayılan 16KB InnoDB sayfa boyutu için maksimum satır boyutu 8 KB'den biraz daha küçüktür. “ InnoDB Tablolarındaki Limitler ”.

  • Değişken uzunlukta sütunlar içeren bir satır InnoDB maksimum satır boyutunu aşarsa, InnoDB, satır InnoDB satır boyutu sınırına uyuncaya kadar harici sayfa dışı depolama için değişken uzunlukta sütunları seçer. Sayfa dışı olarak depolanan değişken uzunlukta sütunlar için yerel olarak depolanan veri miktarı satır biçimine göre değişir. Daha fazla bilgi için, bkz. “ InnoDB Satır Depolama ve Satır Biçimleri ”.
  • Farklı depolama biçimleri, satırlar için kullanılabilir depolama alanı miktarını etkileyen farklı miktarda sayfa başlığı ve treyler verileri kullanır.

1

Bağlantı http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html

Satır Boyutu Sınırları

Belirli bir tablo için maksimum satır boyutu birkaç faktör tarafından belirlenir:

Bir MySQL tablosunun dahili gösterimi, depolama motoru daha büyük satırları destekleyebilse bile maksimum 65.535 bayt sınırına sahiptir. BLOB ve TEXT sütunları, içerikleri satırın geri kalanından ayrı olarak depolandığından, satır boyutu sınırına yalnızca 9 ila 12 bayt katkıda bulunur.

Veritabanı sayfasında yerel olarak depolanan veriler için geçerli olan InnoDB tablosu için maksimum satır boyutu, 4KB, 8KB, 16KB ve 32KB innodb_page_size ayarları için sayfanın yarısından biraz daha küçüktür. Örneğin, varsayılan 16KB InnoDB sayfa boyutu için maksimum satır boyutu 8 KB'den biraz daha küçüktür. 64KB sayfalar için, maksimum satır boyutu 16 KB'tan biraz daha küçüktür. Bkz. Bölüm 15.8.8, “InnoDB Tablolarındaki Limitler”.

Değişken uzunlukta sütunlar içeren bir satır InnoDB maksimum satır boyutunu aşarsa, InnoDB, satır InnoDB satır boyutu sınırına uyuncaya kadar harici sayfa dışı depolama için değişken uzunlukta sütunları seçer. Sayfa dışı olarak depolanan değişken uzunlukta sütunlar için yerel olarak depolanan veri miktarı satır biçimine göre değişir. Daha fazla bilgi için bkz. Bölüm 15.11, “InnoDB Satır Depolama ve Satır Biçimleri”.

Farklı depolama biçimleri, satırlar için kullanılabilir depolama alanı miktarını etkileyen farklı miktarlarda sayfa üstbilgisi ve treyler verileri kullanır.

InnoDB satır biçimleri hakkında bilgi için bkz. Bölüm 15.11, “InnoDB Satır Depolama ve Satır Biçimleri” ve Bölüm 15.8.3, “InnoDB Tablolarının Fiziksel Satır Yapısı”.

MyISAM depolama formatları hakkında bilgi için bkz. Bölüm 16.2.3, “MyISAM Tablo Depolama Formatları”.

http://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html


-3

Sınır yok. Yalnızca boş belleğinize ve sistem maksimum dosya boyutuna bağlıdır. Ancak bu, veritabanınızdaki bellek kullanımı ile mücadelede önlem almamanız gerektiği anlamına gelmez. Her zaman kullanım dışı olan satırları silebilen ya da belirli bir sayıdaki toplam satır sayısını tutamayan bir komut dosyası oluşturun, bin.


8
'Kullanım dışı' olduğunu düşündüğünüz satırları silmek tehlikelidir ve çözdüğünden daha fazla soruna neden olur. Projelerimden bir önceki geliştirici, alışveriş sepetlerini üç günden daha fazla silen ve doğru şeyi yaptığını düşünen bir senaryo uyguladı. Bil bakalım ne, haftalık sorunlara neden oluyor. Yalnızca gerçekten ihtiyacınız olduğunda verileri silin.
Ben Hitchcock

daha kötü bir durum bazı bir veritabanında dosya yollarını depolamaya başladığında ... saman nereye tüm proje dosyaları gitti .... 3.5M dosyalarında başlayan küçük bir proje var ne tahmin ... hepsi değil sık kullanılır.
Kendrick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.