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

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

3
MySQL: เกิดข้อผิดพลาดในการอ่านแพ็กเก็ตการสื่อสาร
ฉันได้รับคำเตือนนี้ใน mysql [Warning] Aborted connection 21 to db: 'MyDB' user: 'MyUser' host: 'localhost' (Got an error reading communication packets) ฉันเคยผ่านหลายหัวข้อใน google และตามคำแนะนำฉันเพิ่มขึ้นmax_allowed_packetจาก128 to 512 to 1024ยังคงพฤติกรรมเดียวกัน ฉันกำลังใช้ Drupal 7 และใช่มีจำนวนมากของชนิดข้อมูลหยด แต่1024 Mbของmax_allowed_packetควรจะเพียงพอในความคิดของฉัน วิธีหลีกเลี่ยงอื่น ๆ วิธีเอาชนะคำเตือนนี้หรือไม่ แก้ไข: เพิ่มการตั้งค่าบางอย่างตามคำแนะนำ / คำตอบของ @ Rolando ฉันยังคงได้รับคำเตือนเดิม config mysql ของฉันมีลักษณะเช่นนี้: [client] port = 3306 socket …
14 mysql  innodb 

2
เหตุใด MySQL จึงสร้างตารางชั่วคราวจำนวนมากบนดิสก์
ความผิดพลาดในการตั้งค่าใด ๆ อาจนำไปสู่การสร้างตารางชั่วคราวมากเกินไปโดย mysql..mysql tuner แสดง Current max_heap_table_size = 200 M Current tmp_table_size = 200 M Of 17158 temp tables, 30% were created on disk table_open_cache = 125 tables table_definition_cache = 256 tables You have a total of 97 tables You have 125 open tables. Current table_cache hit rate is …
13 mysql  innodb  myisam  memory 

2
คุณจะลบการกระจายตัวของข้อมูลจากตาราง InnoDB ได้อย่างไร
ฉันมีฐานข้อมูลที่มีจำนวนตาราง ฉันต้องการลบบางระเบียนออกจากตารางว่าไม่มีระเบียนมากกว่า 20K หรือ 50K ตารางทั้งหมดเป็น InnoDB และfile_per_tableเป็นปิด เมื่อฉันจะลบระเบียนจากตารางจำนวนหนึ่งจะมีการกระจายตัวในตาราง มีวิธีใดที่จะกำจัดการแตกแฟรกเมนต์ อัพเดทเมื่อวันที่ 17 เมษายน mysql> select TABLE_NAME, TABLE_SCHEMA, Data_free from information_schema.TABLES where TABLE_SCHEMA NOT IN ('information_schema', 'mysql') and Data_Free >0; +-----------------+--------------+-----------+ | TABLE_NAME | TABLE_SCHEMA | Data_free | +-----------------+--------------+-----------+ | City | world_innodb | 5242880 | | City_Copy | world_innodb | …

4
Mysql int vs varchar เป็นคีย์หลัก (InnoDB Storage Engine?
ฉันสร้างเว็บแอปพลิเคชัน (ระบบการจัดการโครงการ) และฉันสงสัยเกี่ยวกับสิ่งนี้เมื่อพูดถึงประสิทธิภาพ ฉันมีตารางปัญหาอยู่ข้างในนั้นมี 12 ปุ่มต่างประเทศที่เชื่อมโยงกับตารางอื่น ๆ ในบรรดา 8 คนนั้นฉันต้องเข้าร่วมเพื่อรับฟิลด์ชื่อเรื่องจากตารางอื่น ๆ เพื่อให้ระเบียนมีเหตุผลในแอปพลิเคชันเว็บ 1 ฟิลด์สำหรับการรวมแต่ละรายการ ตอนนี้ฉันยังได้รับคำสั่งให้ใช้คีย์หลักที่เพิ่มขึ้นอัตโนมัติ (ยกเว้นการใช้เศษเป็นข้อกังวลในกรณีที่ฉันควรใช้ GUID) สำหรับเหตุผลด้านความคงทน แต่มันแย่ขนาดไหนในการใช้ varchar (ความยาวสูงสุด 32) ฉันหมายถึงส่วนใหญ่ของตารางเหล่านี้อาจไม่ได้มีการบันทึกจำนวนมาก (ส่วนใหญ่ควรต่ำกว่า 20) นอกจากนี้ถ้าฉันใช้ชื่อเป็นคีย์หลักฉันจะไม่ต้องรวม 95% ของเวลาดังนั้นสำหรับ 95% ของ sql ฉันจะเกิดผลการทำงานที่ยอดเยี่ยม (ฉันคิดว่า) ข้อเสียอย่างเดียวที่ฉันคิดได้ก็คือฉันมีคือฉันจะมีการใช้พื้นที่ดิสก์ที่สูงขึ้น เหตุผลที่ฉันใช้ตารางการค้นหาสำหรับสิ่งนี้มากมายแทนที่จะเป็น enums ก็เพราะฉันต้องการค่าทั้งหมดเหล่านี้เพื่อกำหนดค่าโดยผู้ใช้ผ่านแอปพลิเคชันเอง อะไรคือข้อเสียของการใช้ varchar เป็นคีย์หลักสำหรับตารางที่ไม่ได้ยกเว้นที่จะมีหลายระเบียน? อัพเดท - การทดสอบบางอย่าง ดังนั้นฉันจึงตัดสินใจทำการทดสอบเบื้องต้นเกี่ยวกับสิ่งนี้ ฉันมีบันทึก 100,000 รายการและนี่คือการสืบค้นพื้นฐาน: แบบสอบถาม VARCHAR FK …

4
การล็อกแถว InnoDB - วิธีการนำไปใช้
ตอนนี้ฉันได้ดูรอบ ๆ แล้วอ่านไซต์ mysql และฉันก็ยังไม่เห็นว่ามันทำงานอย่างไร ฉันต้องการเลือกและล็อกแถวผลลัพธ์สำหรับการเขียนเขียนการเปลี่ยนแปลงและปลดล็อค เปิดใช้งาน audocommit โครงการ id (int) name (varchar50) status (enum 'pending', 'working', 'complete') created (datetime) updated (datetime) เลือกรายการที่มีสถานะรอดำเนินการและอัปเดตให้ใช้งานได้ ใช้การเขียนแบบเอกสิทธิ์เฉพาะบุคคลเพื่อให้แน่ใจว่ารายการเดียวกันไม่ได้รับสองครั้ง ดังนั้น; "SELECT id FROM `items` WHERE `status`='pending' LIMIT 1 FOR WRITE" รับ ID จากผลลัพธ์ "UPDATE `items` SET `status`='working', `updated`=NOW() WHERE `id`=<selected id> ฉันต้องทำอะไรเพื่อปลดล็อคและทำงานเหมือนที่ฉันเคยทำด้านบนหรือไม่?
13 mysql  innodb  locking 

2
วิธีการกู้คืนตาราง InnoDB ซึ่งไฟล์ถูกย้ายไปมา
ดังนั้นฉันมีเซิร์ฟเวอร์ทดสอบ db ที่ติดตั้งในกระแสการจำลอง โดยชื่อการเพิ่มประสิทธิภาพผ่านมาซึ่งเต็มพื้นที่อย่างรวดเร็วบนทาสข้อมูล Mysql ตามหน้าที่กำลังรอพื้นที่เพิ่มขึ้น datadir นี้เป็นระบบไฟล์ที่ใช้เป็น datadir ของ mysql เท่านั้นดังนั้นจึงไม่มีสิ่งอื่นใดที่จะทำให้ว่าง ฉันมีตารางการทดสอบขนาด 4 กิ๊กที่ไม่ได้เป็นส่วนหนึ่งของกระแสข้อมูลการจำลองดังนั้นฉันจึงคิดว่าฉันลองทำบางสิ่งเพื่อดูว่ามันใช้งานได้หรือไม่และการเป็นสภาพแวดล้อมการทดสอบ นี่คือขั้นตอนที่ฉันทำ ล้างตารางที่ฉันกำลังจะย้าย วางล็อกการอ่านไว้ (แม้ว่าจะไม่มีอะไรถูกเขียนลงไปและไม่ได้อยู่ในสตรีมการจำลองแบบ) คัดลอก. frm และ. ibd ไปยังระบบไฟล์ที่มีห้องว่าง ปลดล็อกตาราง ตัดทอนตารางนั้น - ทำให้มีพื้นที่ว่างเพียงพอสำหรับการปรับให้เสร็จสมบูรณ์เมื่อการเรพลิเคทเริ่มต้นการสับอีกครั้ง หยุดทาส / ปิด mysql คัดลอกไฟล์จาก tmp กลับไปยัง data dir รีสตาร์ท mysql ไม่มีสิ่งใดปรากฏในบันทึก .err สิ่งต่าง ๆ ดูดี ฉันเชื่อมต่อและใช้ mydb; และดูตารางที่ฉันเล่นด้วยในตารางแสดง แต่ถ้าฉันลอง select * …

2
INSERT ได้รับการกำหนดอัตโนมัติหรือไม่
แอปพลิเคชันของเรายิงแบบสอบถาม INSERT ไปยังฐานข้อมูล MySQL เพื่อเพิ่มบันทึก ฉันต้องการทราบว่าบันทึกได้รับการกำหนดอัตโนมัติหรือไม่ ถ้าฉันรันคำสั่ง ROLLBACK ฐานข้อมูลจะทำการย้อนกลับเมื่อใด การย้อนกลับเป็นไปได้หลังจากคอมมิชชันหรือไม่?
13 mysql  innodb 

1
คำสั่ง MySQL ทำการสืบค้นฐานข้อมูล MyISAM ทั้งหมด
ฉันจะขอบคุณถ้าใครสามารถช่วยฉันในสิ่งที่เป็นคำสั่งที่เหมาะสมใน MySQL เพื่อค้นหาฐานข้อมูลทั้งหมดที่มีเครื่องมือ "MyISAM" ฉันต้องแปลง DB & ทุกตารางจาก MyISAM เป็น InnoDB
13 mysql  innodb  myisam 

6
วิธีเพิ่มคอลัมน์ในตารางขนาดใหญ่ใน MySQL
ฉันเป็นนักพัฒนา PHP ดังนั้นอย่าเข้มงวด ฉันมีตารางขนาดใหญ่ ~ 5.5gb dump PM ของเราตัดสินใจที่จะสร้างคอลัมน์ใหม่เพื่อดำเนินการคุณสมบัติใหม่ ตารางคือ InnoDB ดังนั้นสิ่งที่ฉันลอง: เปลี่ยนตารางในหน้าจอพร้อมล็อคตาราง เอา ~ 30 ชั่วโมงและไม่มีอะไร ดังนั้นฉันแค่หยุดมัน ครั้งแรกที่ฉันทำผิดเพราะฉันไม่ได้จบการทำธุรกรรมทั้งหมด แต่ครั้งที่ 2 ไม่มีมัลติเลค copy to tmp tableสถานะเป็น เนื่องจากฉันต้องใช้การแบ่งพาร์ติชันสำหรับตารางนี้เราจึงตัดสินใจทำการดัมพ์เปลี่ยนชื่อและสร้างตารางด้วยชื่อเดียวกันและโครงสร้างใหม่ แต่การถ่ายโอนข้อมูลกำลังทำสำเนาอย่างเข้มงวด (อย่างน้อยฉันก็ไม่พบสิ่งอื่นใด) ดังนั้นฉันจึงเพิ่มการถ่ายโอนข้อมูลคอลัมน์ใหม่ด้วยsedและสอบถาม แต่มีข้อผิดพลาดแปลก ๆ เกิดขึ้น ฉันเชื่อว่ามันเกิดจากชุดอักขระ ตารางในไฟล์ UTF-8 และกลายเป็น ASCII sedสหรัฐอเมริกาหลังจากที่ ดังนั้นฉันจึงได้รับข้อผิดพลาด (ไม่ทราบคำสั่ง '\' ') จากข้อมูล 30% ดังนั้นนี่เป็นวิธีที่ไม่ดี ตัวเลือกอื่น ๆ ในการทำสิ่งนี้ให้สำเร็จและเพิ่มประสิทธิภาพความเร็ว (ฉันสามารถทำได้ด้วยสคริปต์ …
13 mysql  innodb 

4
จำนวนที่เหมาะสมที่สุดของอินสแตนซ์ MySQL InnoDB Buffer Pool
ลักษณะเซิร์ฟเวอร์ ระบบ RAM ทั้งหมด: 8GB (ใช้งาน MySQL + สิ่งอื่นนอกเหนือจาก MySQL ในนั้นคือไม่ได้ทุ่มเทให้กับ MySQL) จำนวนคอร์ CPU: 6 ฉันมีข้อมูลในฐานข้อมูลประมาณ 2GB ฉันมี InnoDB Buffer Pool Size ตั้งไว้ที่ 4GB ไหนดีกว่า: Innodb Buffer Pool Instances ตั้งค่าเป็น 1 Innodb Buffer Pool Instances ตั้งค่าเป็น 2 (2GB ในแต่ละ)? Innodb Buffer Pool Instances ตั้งค่าเป็น 4 (แต่ละ 1GB ในแต่ละ)? Innodb Buffer …


1
MySQL: ธุรกรรมจะล็อกแถวหรือไม่
ฉันไม่เคยลองใช้ธุรกรรม MySQL มาก่อนฉันแค่ต้องการชี้แจงบางอย่าง หากผู้ใช้สองคนเรียกใช้แบบสอบถามในเวลาที่แน่นอน MySQL จะจัดการเรื่องนี้อย่างไร เช่นผู้ใช้พยายามอัปเดตบันทึก user1: อัปเดตชุดตารางคอลัมน์ = คอลัมน์ - 4 โดยที่ column_id = 1; user2: อัปเดตชุดคอลัมน์ตาราง = คอลัมน์ - 7 โดยที่ column_id = 1; ตอนนี้ถ้าฉันใช้ทรานแซกชัน MySQL จะเลือกแบบสอบถามที่จะถูกดำเนินการก่อนและล็อกผู้ใช้รายที่สองจนกว่าจะมีการสืบค้นครั้งแรก จะเป็นล็อคตารางหรือล็อคแถวหรือไม่? จะเป็นอย่างไรถ้าผู้ใช้รายที่สามออกคำสั่ง select? MySQL จะคืนค่าอะไร? ป.ล. นี้จะอยู่ที่ Innodb

4
ผลลัพธ์การค้นหาข้อความแบบเต็มในเวลาจำนวนมากใน 'การกำหนดค่าเริ่มต้น FULLTEXT'
ขณะนี้ฉันกำลังพยายามเรียกใช้แบบสอบถามบางอย่างเทียบกับการถ่ายโอนข้อมูลของความคิดเห็นของ Stack Overflow นี่คือลักษณะของสคีมา: CREATE TABLE `socomments` ( `Id` int(11) NOT NULL, `PostId` int(11) NOT NULL, `Score` int(11) DEFAULT NULL, `Text` varchar(600) NOT NULL, `CreationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `UserId` int(11) NOT NULL, PRIMARY KEY (`Id`), KEY `idx_socomments_PostId` (`PostId`), KEY `CreationDate` (`CreationDate`), FULLTEXT KEY `Text` (`Text`) …

1
ประโยชน์ของ Barracuda และการบีบอัด
ฉันได้อ่านเกี่ยวกับรูปแบบไฟล์ของ MySQL Antelope และ Barracuda เมื่อไม่นานมานี้และฉันสงสัยว่าฉันจะได้รับประโยชน์จากการมี Barracuda และการบีบอัดข้อมูลหรือไม่ เซิร์ฟเวอร์ของฉันใช้แอนทีโลปอยู่เพราะเป็นค่าเริ่มต้นของ MySQL ฉันมีปัญหากับหน่วยความจำหลายครั้งเนื่องจากฐานข้อมูลขนาดใหญ่ที่ฉันมี ฐานข้อมูลของฉันเพิ่มขึ้นทุกวัน ดูเหมือนว่าการบีบอัดจะให้ประโยชน์กับคนไม่กี่คนเช่น: http://www.mysqlperformanceblog.com/2008/04/23/real-life-use-case-for-barracuda-innodb-file-format/ ฉันเข้าใจว่าหน่วยความจำและพื้นที่ดิสก์สามารถลดลงได้ แต่ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งนี้หรือไม่ (อ้างอิงจากบทความ): "~ 5% โหลด CPU ตามด้านบน (จาก 80-100% ส่วนใหญ่รอ I / O) 0.01 เวลาค้นหาเฉลี่ยวินาทีโดยคีย์หลัก (จาก 1-20 วินาทีก่อนการแปลง) " ฉันคิดว่าสองสิ่งนี้จะไม่ดีขึ้นเพราะถ้าข้อมูลถูกบีบอัดเซิร์ฟเวอร์ต้องคลายการบีบอัดเพื่อรับข้อมูลต้นฉบับอีกครั้งดังนั้นจึงไม่เหมาะสมที่การใช้งาน CPU จะเพิ่มขึ้นใช่ไหม สิ่งนี้มีประโยชน์กับคุณในแอปพลิเคชันแบบอ่าน / เขียนหรือไม่ คุณจะแนะนำให้ฉันเปลี่ยนเป็น Barracuda และการบีบอัดไหม คุณตระหนักถึงปัญหาของ Barracuda หรือไม่? ดูเหมือนว่าคำตอบของคำถามต่อไปนี้จะกล่าวถึงปัญหาบางอย่าง แต่เนื่องจากมาจาก 2011 ฉันจะบอกว่าได้รับการแก้ไขแล้วในตอนนี้: …

3
อินสแตนซ์ MySQL ถ่วงเวลา“ กำลังทำดัชนี SYNC”
ปัญหา อินสแตนซ์ของ MySQL 5.6.20 ที่ทำงานอยู่ (ส่วนใหญ่เป็นเพียง) ฐานข้อมูลที่มีตาราง InnoDB กำลังแสดงแผงลอยเป็นครั้งคราวสำหรับการดำเนินการอัปเดตทั้งหมดเป็นระยะเวลา 1-4 นาทีกับ INSERT, UPDATE และ DELETE ทั้งหมดที่เหลืออยู่ในสถานะ "Query end" เห็นได้ชัดว่าโชคร้ายที่สุด บันทึกการสืบค้นที่ช้าของ MySQL กำลังบันทึกแม้กระทั่งแบบสอบถามที่ไม่สำคัญมากที่สุดด้วยเวลาสอบถามที่ไม่ได้ใช้งานหลายร้อยรายการที่มีการประทับเวลาเดียวกันสอดคล้องกับเวลาที่แผงลอยได้รับการแก้ไข: # Query_time: 101.743589 Lock_time: 0.000437 Rows_sent: 0 Rows_examined: 0 SET timestamp=1409573952; INSERT INTO sessions (redirect_login2, data, hostname, fk_users_primary, fk_users, id_sessions, timestamp) VALUES (NULL, NULL, '192.168.10.151', NULL, 'anonymous', '64ef367018099de4d4183ffa3bc0848a', …

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