คำถามติดแท็ก innodb

InnoDB: เครื่องมือจัดเก็บ ACID ที่สอดคล้องกับ MySQL

2
ฉันจะกำหนดค่า MySQL Innodb ให้จัดการกับเม็ดมีด 1000 ต่อชั่วโมงได้อย่างไร
ฉันมีเว็บไซต์ที่มีปริมาณการใช้งานสูงซึ่งเป็นไปได้ที่จะมีการแทรกระเบียนใหม่ 1,000 รายการทุกชั่วโมง ข้อผิดพลาดเดียวนี้ทำให้หมดอำนาจเว็บไซต์: PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: INSERT INTO {location_instance} (nid, vid, uid, genid, lid) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4); Array ( [:db_insert_placeholder_0] => 1059 [:db_insert_placeholder_1] => 1059 [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => cck:field_item_location:1059 [:db_insert_placeholder_4] => 1000 …

4
วิธีการใช้ประโยชน์สูงสุดจาก MySQL บนเครื่อง QuadCore ด้วย RAM ขนาด 16 GB?
ฉันใช้เซิร์ฟเวอร์ MySQL 5.5 บนเวิร์กสเตชันของฉันสำหรับการวิเคราะห์ข้อมูลทางวิทยาศาสตร์และสงสัยว่าจะกำหนดค่า MySQL อย่างไรเพื่อให้ได้ประสิทธิภาพที่ดีที่สุด ประเภทของแบบสอบถามที่ฉันใช้โดยทั่วไปเกี่ยวข้องกับการรวม 10-20 ตารางและสามารถทำงานได้ค่อนข้างนานหนึ่งถึงหลายนาทีโดยไม่มีข้อยกเว้นเลย มีผู้ใช้เพียงไม่กี่รายเท่านั้นที่เข้าถึงฐานข้อมูลในเวลาเดียวกัน (5 เป็นจำนวนสูงสุด) ฉันย้ายเซิร์ฟเวอร์จาก Lenovo Thinkpad T61 ด้วย Dual Core 2.2 GHz และ RAM 4 GB ไปยังเครื่องใหม่ที่มีส่วนประกอบที่เลือกด้วยมือ: Intel i7 3770, 4x 3.4 GHz (ทำงานที่ 4x3.7 GHz) ชิปเซ็ต Z77 DDR3 1600 RAM 16 GB Windows 7 Prof 64-bit เซิร์ฟเวอร์ Windows และ MySQL …

3
วิธีการใช้การหน่วงเวลาการแทรกด้วยเอ็นจิน InnoDB และใช้การเชื่อมต่อน้อยลงสำหรับการแทรกคำสั่ง
ฉันกำลังทำงานกับแอปพลิเคชันที่เกี่ยวข้องกับการเขียนฐานข้อมูลจำนวนมากมีการแทรกประมาณ 70% และการอ่าน 30% อัตราส่วนนี้จะรวมการอัปเดตซึ่งฉันคิดว่าเป็นหนึ่งการอ่านและการเขียนหนึ่งครั้ง ผ่านคำสั่งแทรกไคลเอนต์หลายคนแทรกข้อมูลในฐานข้อมูลผ่านคำสั่งแทรกด้านล่าง: $mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)"); คำถามคือฉันควรใช้insert_delayหรือใช้กลไกmysqli_multi_queryเพราะคำสั่งแทรกใช้ ~ 100% cpu บนเซิร์ฟเวอร์ ฉันใช้เอ็นจิ้น InnoDB บนฐานข้อมูลของฉันดังนั้นการแทรกที่ล่าช้าจึงเป็นไปไม่ได้ การแทรกบนเซิร์ฟเวอร์คือ ~ 36k / ชม. และอ่านได้ 99.89% นอกจากนี้ฉันกำลังใช้คำสั่งเลือกที่มีการดึงข้อมูลเจ็ดครั้งในแบบสอบถามเดียวแบบสอบถามนี้ใช้เวลา 150 วินาทีบนเซิร์ฟเวอร์เพื่อดำเนินการ ฉันสามารถใช้เทคนิคหรือกลไกชนิดใดสำหรับงานนี้ หน่วยความจำเซิร์ฟเวอร์ของฉันคือ 2 gb ฉันควรขยายหน่วยความจำหรือไม่ ไปดูปัญหานี้ข้อเสนอแนะใด ๆ จะขอบคุณฉัน โครงสร้างของตาราง: +-----------------+--------------+------+-----+-------------------+----------------+ | Field | …

2
การใช้หลายคอร์สำหรับเคียวรี MySQL เดี่ยวบน Debian
ฉันใช้เซิร์ฟเวอร์ MySQL สำหรับการทดสอบบน VM (VMWare) กับ Debian ในฐานะแขกของระบบปฏิบัติการ แขกมีคอร์ CPU ที่จำลองสี่แกนดังนั้นฉันจึงตั้งค่า thread_concurrency เป็นสี่ ฉันกำลังทำร่วมราคาแพงบนโต๊ะขนาดใหญ่ซึ่งอาจใช้เวลาหลายนาที แต่ฉันเห็นในระบบปฏิบัติการของแขกว่ามีเพียงหนึ่งคอร์เท่านั้นที่ใช้ในแต่ละครั้ง สิ่งนี้เกิดขึ้นโดยไม่คำนึงถึงเอ็นจิ้นการจัดเก็บที่ใช้สำหรับตารางที่เกี่ยวข้อง (ทดสอบกับ MyISAM และ InnoDB) นอกจากนี้ฐานข้อมูลทั้งหมดดูเหมือนจะถูกบล็อกเมื่อทำการสอบถามขนาดใหญ่เหล่านี้ฉันไม่สามารถทำแบบสอบถามเพิ่มเติมใด ๆ ในแบบคู่ขนาน แสดงว่า htop แปลก ๆ ที่แกนกลางที่ใช้สำหรับคิวรีนั้นเปลี่ยนไปในระหว่างรันไทม์ของคิวรี! ทำไมสิ่งนี้ถึงเกิดขึ้น นี่คือรายการที่เกี่ยวข้องจากSHOW FULL PROCESSLIST;(ไม่มีคำสั่งอื่น ๆ ): | 153 | root | localhost | pulse_stocks | Query | 50 | Copying to tmp …

1
กู้คืนฐานข้อมูล mysql เดียวบนระบบที่ถูกจำลองแบบ master-slave ที่ไม่ว่าง
กำลังมองหากลยุทธ์หรือเครื่องมือในการจัดการกับการกู้คืนฐานข้อมูลเดียวไปยังจุดในเวลาในระบบจำลองแบบไม่ว่าง ฉันมี 12 ฐานข้อมูลที่ทำงานบนเซิร์ฟเวอร์ MySQL 5.0.77 2 ตัวในการกำหนดค่าแบบจำลองต้นแบบทาส การถ่ายโอนข้อมูลเต็มรูปแบบถูกนำมาใช้เป็นทาสแบบอ่านอย่างเดียวทุกวันและมีการทิ้ง SQL ที่เพิ่มขึ้นพร้อมกับการสำรองข้อมูลเหล่านี้นอกสถานที่และตรวจสอบสถานะการจำลองแบบ แก้ไข: ตารางเป็นส่วนผสมของ InnoDB และ myISAM ดังนั้นจึงไม่มีโซลูชันเฉพาะเครื่องยนต์ เมื่อได้รับความล้มเหลวอย่างสมบูรณ์ของเซิร์ฟเวอร์หลักฉันสามารถทำลายการจำลองแบบและส่งเสริมเซิร์ฟเวอร์ทาสฉันยังมีตัวเลือกในการสร้างเซิร์ฟเวอร์ใหม่และกำหนดค่าจากการสำรองข้อมูล FULL ล้ำหน้าแล้วใช้ส่วนต่างที่เกิดขึ้นจากทาสทุกชั่วโมง อย่างไรก็ตามฉันกังวลว่าจะจัดการกับความล้มเหลวบางส่วนหรือความล้มเหลวของฐานข้อมูลเดียวได้อย่างไร ฉันคิดว่า 2 สถานการณ์ที่ค่อนข้างน่าจะเป็น ฐานข้อมูล 7 (ตัวอย่าง) เกิดความเสียหายยังคงให้บริการคำขอบางอย่างจนกว่าจะมีคนสังเกตว่ามันเสียหรือการแจ้งเตือนจากไฟล์บันทึก ... แบบสอบถามบางอย่างเช่นฐานข้อมูลแบบหล่นตารางวาง "อัปเดตที่ ... " พิมพ์แบบสอบถามแบบบอร์กเป็นฐานข้อมูลเดียวหรือบางส่วนในนั้น ในขณะนี้ฉันมีไฟล์ดัมทั้งหมดเป็นไฟล์ FULL- $ DATE-all-database.sql.gz และดิฟเฟอเรนเชียลที่สามารถนำไปใช้กับการถ่ายโอนข้อมูล FULL ได้เช่น DIFF- $ DATE-all-database.sql.gz ในการกู้คืนฐานข้อมูล 7 ไปยังจุดเวลาจะต้องมี grep ผ่านไฟล์ FULL …

2
การกำหนดค่า MySQL 5.1 InnoDB / 24GB RAM - โหลดสูง bi-xeon
ฉันกำลังใช้งานแอพ facebook ซึ่งปัจจุบันมีผู้ใช้งานพร้อมกัน 300 - 600 คน (และกำลังเติบโต) เพื่อให้ฮาร์ดแวร์พร้อมสำหรับการเติบโตฉันได้เปลี่ยน i7 / 12gb ram / 2x 80gb intel x25 ssd (debian 5.0 / mysql 5.0 / 64 บิต) เป็น bi-xeon / 24gb ram / 2x 120gb intel 320 ssd (Ubuntu 10.10 / mysql 5.1 / 64bit) ตอนนี้ฉันกำลังเผชิญกับปัญหาที่ประสิทธิภาพแย่กว่า "กล่องขนาดเล็ก" ในเซิร์ฟเวอร์ทั้งสองฉันใช้ nginx / …

2
InnoDB หมดเวลาไม่ได้อธิบาย
ฉันได้เห็นการอัปเดตพื้นฐานบางอย่างหมดเวลาเมื่อเร็ว ๆ นี้และไม่สามารถระบุสาเหตุได้ ตัวอย่าง: // # Query_time: 51 Lock_time: 0 Rows_sent: 0 Rows_examined: 0 UPDATE photos SET position = position + 1 WHERE (photo_album_id = 40470); บันทึกเดียวกันไม่มีรายการที่มี Lock_time> 0 การเรียกใช้show innodb statusจะไม่เปิดเผยการล็อคที่เกี่ยวข้อง ปัญหานี้ดูเหมือนว่าจะมีผลกระทบกับตารางที่แตกต่างกันอย่างน้อย 5 ตารางตามบันทึกของเซิร์ฟเวอร์แอปของฉัน (ซึ่งแสดงMysql::Error: Lock wait timeout exceededข้อผิดพลาดที่เกี่ยวข้องกับแต่ละรายการที่เกี่ยวข้องในบันทึก mysql ช้า) มีความคิดว่าจะไปจากที่นี่ไหม? ฉันตีปลายตายในทุกทิศทาง ขอบคุณ แก้ไข: สร้างตาราง `photos` ( `id` …

1
MySQL InnoDB Deadlock สำหรับการสืบค้นง่ายๆ 2 แบบ
ฉันมีการหยุดชะงักสำหรับข้อความค้นหาแทรกสองรายการนี้: insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.596', 180, 4, 181, 561) insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.611', 180, 4, 181, 563) นี่คือสถานะ InnoDB: ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2014-12-23 15:47:11 1f4c *** (1) TRANSACTION: TRANSACTION 19896526, …
10 mysql  innodb  deadlock 

4
แสดงชื่อตาราง + จำนวนเรคคอร์ดสำหรับแต่ละตารางในฐานข้อมูล mysql innodb
วิธีแสดงรายการตารางทั้งหมดในฐานข้อมูลปัจจุบันพร้อมกับจำนวนแถวของตาราง กล่าวอีกนัยหนึ่งคุณสามารถคิดถึงคำถามที่จะเกิดขึ้นกับสิ่งนี้ใน mysql หรือไม่? +------------------------++------------------------+ | Tables_in_database | Number of rows | +------------------------++------------------------+ | database 1 | 1000 | | database 2 | 1500 | +------------------------++------------------------+ วิธีการที่แตกต่างยินดีต้อนรับ
10 mysql  innodb  select  count 

3
กู้คืน MySQL Tables จากไฟล์. ibd, .frm และ mysqllogbin
ด้วยเหตุผลบางอย่างเมื่อฉันพยายามเปิดตารางของฉันที่เก็บไว้ใน.frmและ.ibdไฟล์ (ไม่ว่าจะใน MySQL หรือ phpmyadmin) มันทำให้ฉันมีข้อผิดพลาดทางไวยากรณ์หรือมันบอกว่ามันไม่มีอยู่ ฉันได้อ่านโพสต์อื่นที่มีปัญหาคล้ายกันนี้ แต่ฉันไม่ทราบวิธีตรวจสอบว่าinnodb_file_per_tableเปิดใช้งานหรือไม่และโดยรวมฉันสับสนจริงๆ ฉันแปลงสำเนาmysql-bin.000002ไฟล์เป็นไฟล์ txt ด้วยดังนั้นฉันเห็นว่าข้อมูลจากฐานข้อมูลของฉันไม่สูญหายทั้งหมด ฐานข้อมูลถูกสร้างขึ้นเมื่อปีที่แล้ว ฉันมีmysql-bin.00000ไฟล์เหล่านี้ 6 ไฟล์ แต่ด้วยเหตุผลบางอย่างไฟล์.000002ใหญ่ที่สุด ตอนนี้ฉันมี.ibdและ.frmไฟล์สำหรับฐานข้อมูลทั้งหมดของฉัน แต่ฉันกำลังสูญเสียว่าฉันสามารถคืนค่ากลับสู่ MySQL หรืออย่างน้อยก็เป็นสิ่งที่ฉันสามารถอ่านได้ ฉันใช้ WampServer 2.4 และ MySQL 5.6.12 บน Windows 2003 Server นอกจากนี้ฉันควรจะดาวน์โหลดปลั๊กอินใน InnoDB ด้วยหรือไม่

3
mysqldump - ธุรกรรมเดี่ยว แต่อัพเดตคิวรี่กำลังรอการสำรองข้อมูล
ถ้าฉันใช้ mysqldump - ธุรกรรมเดี่ยวตามเอกสารที่ควรทำตารางล้างด้วยล็อคการอ่านเพื่อให้ได้สถานะที่สอดคล้องกันจากนั้นเริ่มต้นการทำธุรกรรมและไม่มีนักเขียนที่ควรจะรอ อย่างไรก็ตามเมื่อคืนนี้ฉันได้พบกับสถานการณ์ต่อไปนี้: ส่วนที่ตัดตอนมาจากรายการกระบวนการเต็มรูปแบบแสดง: หลายร้อยคน ... Command: Query Time: 291 State: Waiting for table flush Info: insert into db_external_notification..... ถ้าอย่างนั้น: Command: Query Time: 1204 State: Sending data Info: SELECT /*!40001 SQL_NO_CACHE */ * FROM `db_external_notification` และเธรดที่เหลืออยู่ในโหมดสลีป ไม่มีใครมีความคิดใด ๆ สิ่งที่แทรกเหล่านี้รอ? ฉันไม่เห็นตาราง FLUSH หรือ DDL ใด ๆ หรืออะไรก็ตามที่กล่าวถึงในคู่มือที่อาจทำให้ข้อความค้นหารอ คำสั่ง mysqldump …

3
แทรกความเร็วสำหรับชุดงานขนาดใหญ่
ในแอปพลิเคชันของฉัน INSERT ของฉันดูเหมือนจะใช้เวลาอย่างมาก ฉันมีวัตถุจำนวนมากในหน่วยความจำ (~ 40-50,000) ซึ่งฉันต้องการแทรกลงในตาราง ลองดูตารางตัวอย่าง CREATE TABLE bill ( id BIGINT(20) PRIMARY KEY, amount INT(11) DEFAULT 0, bill_date DATETIME DEFAULT NOW(), INDEX (bill_date) ) ENGINE=InnoDB การใช้ 3 แถวเป็นขนาดแบทช์ของฉันต่อไปนี้เป็นแนวทางที่ฉันคิดได้สำหรับการแทรก วิธีที่ 1 - สร้างและยิงเม็ดมีด 3 เม็ด INSERT INTO bill (amount, bill_date) VALUES (10, '2012-01-01 00:00:00'); INSERT INTO bill (amount, …
10 mysql  innodb  insert  java  jdbc 

2
ฉันจะสร้าง binlog-format = ROW เป็นค่าเริ่มต้นในไฟล์ /etc/my.cnf ได้อย่างไร
ฉันสามารถเรียกใช้แบบสอบถามSET GLOBAL binlog_format = 'ROW'และใช้ได้กับเซสชันนั้น ฉันจะทำให้การตั้งค่านี้ติดหลังจากหยุดและรีสตาร์ท MySQL ได้อย่างไร หมายเหตุ: ฉันอยู่ในรุ่น 5.5.19 ของ MySQL (พร้อม Moodle) และฉันเพิ่งอัพเกรดจาก MyISAM เป็น InnoDB ดังนั้นจึงต้องมีการตั้งค่าใหม่นี้ ฉันได้ลองเพิ่มคำสั่งสองคำสั่งนี้ (แยกกัน) ลงใน my.cnf: binlog-format = ROWและbinlog_format = ROWและไม่ทำงาน ฉันหยุดและเริ่ม MySQL ใหม่ทุกครั้งที่ฉันเปลี่ยน my.cnf ข้อผิดพลาดที่ฉันได้รับหากไม่มีการตั้งค่านี้เป็นข้อความแสดงข้อผิดพลาดสามานย์: ข้อมูลการดีบัก: ไม่สามารถดำเนินการคำสั่ง: เป็นไปไม่ได้ที่จะเขียนลงในบันทึกไบนารีเนื่องจาก BINLOG_FORMAT = STATEMENT และอย่างน้อยหนึ่งตารางใช้เอ็นจิ้นการจัดเก็บที่ จำกัด เฉพาะการบันทึกตามแถว InnoDB ถูก จำกัด ไว้ที่การบันทึกแถวเมื่อระดับการแยกธุรกรรมถูกอ่านยอมรับหรืออ่านไม่ได้รับการยอมรับ
9 mysql  innodb  my.cnf 

1
MySQL INNODB เกิดความเสียหายหลังจากเซิร์ฟเวอร์ขัดข้องระหว่างคำสั่ง truncate
เซิร์ฟเวอร์ของฉันทำงานล้มเหลววันนี้ฉันคิดว่าเนื่องจากคำสั่งตัดทอนตารางพร้อมกันบนหนึ่งในตาราง INNODB ของเรา เซิร์ฟเวอร์สามารถเริ่มต้นใหม่ได้ แต่หลังจากเริ่มทำงานทุกครั้งที่ฉันพยายามออกคำสั่ง SQL ฉันได้รับข้อผิดพลาดต่อไปนี้: ERROR 2006 (HY000): MySQL server has gone away นี่คือสิ่งที่เกิดขึ้นในบันทึก: 121206 01:11:12 mysqld restarted 121206 1:11:13 InnoDB: Started; log sequence number 275 559321759 InnoDB: !!! innodb_force_recovery is set to 1 !!! 121206 1:11:13 [Note] /usr/libexec/mysqld: ready for connections. Version: '5.0.95-log' socket: '/var/lib/mysql/mysql.sock' port: 3306 …

1
Amazon RDS MySQL 5.5 Innodb Lock timeout เกินกำหนดแล้ว
นับตั้งแต่เราย้ายไปที่ Amazon RDS เรามีปัญหาเรื่องประสิทธิภาพที่ค่อนข้างบ้าคลั่งและวันนี้เราเริ่มมีปัญหาการล็อค ด้วยเหตุนี้ฉันจึงพบว่ามันเป็นปัญหาการหมดเวลาและไปตรวจสอบหน่วยความจำที่เราใช้ เราแลกเปลี่ยนกันได้ประมาณ 70MB ฉันไปที่หน่วยความจำแม่มดล่าสัตว์กับ mysqltuner และมันบอกว่าการใช้หน่วยความจำสูงสุดประมาณ 400% เป็นไปได้ ตอนนี้ฉันได้ลดลงเหลือเพียงเล็กน้อย> 100% ขอบคุณตัวช่วยสร้างการกำหนดค่าของ Percona อย่างไรก็ตามเรายังคงมีปัญหาการล็อคนี้ดังนั้นฉันคิดว่ามันไม่เกี่ยวข้องกับหน่วยความจำ / การแลกเปลี่ยน ทำไมฉันยังคงได้รับการล็อค เกิดอะไรขึ้นที่นี่? ฉันมั่นใจว่าการรีบูตจะแก้ปัญหาได้ แต่นั่นไม่ควรเป็นวิธีแก้ปัญหา เราจะทำอย่างไรเพื่อป้องกันปัญหานี้ในอนาคต ฉันพยายามล้างแคชแบบสอบถามและตาราง - ใช้งานได้ ฟลัชประเภทอื่นไม่ทำงานขอบคุณ RDS: / นี่คือความมั่งคั่งของข้อมูลที่ฉันคิดได้: QUERY INSERT INTO `myTable` (`firstName`, `lastName`, `email`) VALUES ('Travis', 'B...', '...@gmail.com') ข้อความผิดพลาด Lock wait timeout exceeded; try restarting transaction …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.