पर प्रदर्शन घटता है मैं एक विशाल तालिका के साथ काम कर रहा हूं जिसमें 250 + मिलियन पंक्तियां हैं। स्कीमा सरल है।MySQL डालने प्रदर्शन एक बड़ी तालिका
CREATE TABLE MyTable (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
oid INT NOT NULL,
long1 BIGINT NOT NULL,
str1 VARCHAR(30) DEFAULT NULL,
str2 VARCHAR(30) DEFAULT NULL,
str2 VARCHAR(200) DEFAULT NULL,
str4 VARCHAR(50) DEFAULT NULL,
int1 INT(6) DEFAULT NULL,
str5 VARCHAR(300) DEFAULT NULL,
date1 DATE DEFAULT NULL,
date2 DATE DEFAULT NULL,
lastUpdated TIMESTAMP NOT NULL,
hashcode INT NOT NULL,
active TINYINT(1) DEFAULT 1,
KEY oid(oid),
KEY lastUpdated(lastUpdated),
UNIQUE KEY (hashcode, active),
KEY (active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 MAX_ROWS=1000000000;
सम्मिलन का प्रदर्शन उल्लेखनीय रूप से गिरा दिया गया है। तालिका में 150 मिलियन पंक्तियों तक, इसमें 10,000 पंक्तियों को डालने के लिए 5-6 सेकंड लगते थे। अब यह 2-4 बार बढ़ गया है। Innodb की ibdata फ़ाइल 107 जीबी तक बढ़ी है। इनोडब कॉन्फ़िगरेशन पैरामीटर निम्नानुसार हैं।
innodb_buffer_pool_size = 36G # Machine has 48G memory
innodb_additional_mem_pool_size = 20M
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_file_size = 50M
innodb_log_buffer_size = 20M
innodb_log_files_in_group=2
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
expire_logs_days = 4
आईओ प्रतीक्षा समय बढ़ गया है जैसा कि top
के साथ देखा गया है। मैंने O_DSYNC को फ्लश विधि बदलने की कोशिश की है, लेकिन इससे मदद नहीं मिली। डिस्क हार्डवेयर RAID 10 सेटअप से बना है। एकल डिस्क के साथ पहले के सेटअप में, आईओ कोई समस्या नहीं थी।
तालिका केवल विभाजन का विभाजन कर रहा है? एकल 100 जी फ़ाइल को "छोटी" फाइलों में विभाजित करने में मदद मिल सकती है? क्या कोई चर है जिसे RAID के लिए ट्यून करने की आवश्यकता है?
अद्यतन: यह एक परीक्षण प्रणाली है। मुझे कोई बदलाव करने की स्वतंत्रता है।
धन्यवाद, मार्क। यह एक परीक्षण प्रणाली है। –
सूचकांक आकार के बारे में आपकी युक्ति सहायक है। मैं अनुक्रमण पर काम कर रहा हूं। –