ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

2
การบำรุงรักษาดัชนี MySQL
ฉันทำวิจัยจำนวนมากเกี่ยวกับวิธีการบำรุงรักษาดัชนีใน MySQL เพื่อป้องกันการแตกแฟรกเมนต์และเพื่อเพิ่มประสิทธิภาพการดำเนินการของแบบสอบถามบางอย่าง ฉันคุ้นเคยกับสูตรนั้นที่คำนวณอัตราส่วนระหว่างพื้นที่ว่างสูงสุดที่มีอยู่สำหรับตาราง VS พื้นที่ที่ใช้โดยข้อมูลและดัชนี อย่างไรก็ตามคำถามหลักของฉันยังคงไม่มีคำตอบ บางทีนี่อาจเป็นเพราะฉันคุ้นเคยกับการบำรุงรักษาดัชนีใน SQL Server และฉันมักจะคิดว่าใน MySQL มันควรจะคล้ายกัน ในเซิร์ฟเวอร์ SQL คุณสามารถมีดัชนีได้หลายดัชนีและแต่ละดัชนีสามารถมีการแตกแฟรกเมนต์ระดับต่างกัน จากนั้นคุณสามารถเลือกและดำเนินการ 'REORGANIZE' หรือ 'REBUILD' ในดัชนีนั้นโดยไม่กระทบต่อส่วนที่เหลือ ความรู้ของฉันอย่างดีที่สุดไม่มี 'การแตกแฟรกเมนต์ของตาราง' และ SQL Server ไม่ได้จัดเตรียมเครื่องมือใด ๆ เพื่อแก้ไข 'การแตกแฟรกเมนต์ตาราง' สิ่งที่มีให้คือเครื่องมือในการตรวจสอบการแตกแฟรกเมนต์ของดัชนี (เข้าใจเช่นอัตราส่วนระหว่างจำนวนหน้าที่ใช้โดยดัชนีเทียบกับความสมบูรณ์ของหน้าและความต่อเนื่องกัน) รวมทั้งการกระจายตัวของภายในและภายนอก ทั้งหมดนี้ค่อนข้างตรงไปตรงมาที่จะเข้าใจอย่างน้อยก็สำหรับฉัน ตอนนี้เมื่อถึงคราวที่ต้องรักษาดัชนีใน MySQL จะมีเพียงแนวคิดของ 'การแตกแฟรกเมนต์ของตารางดังกล่าวข้างต้น ตารางใน MySQL สามารถมีดัชนีได้หลายดัชนี แต่เมื่อฉันตรวจสอบ 'อัตราส่วนการกระจายตัวของ' ด้วยสูตรที่มีชื่อเสียงนั้นฉันไม่เห็นการกระจายตัวของดัชนีแต่ละรายการ แต่ตารางโดยรวม เมื่อฉันต้องการเพิ่มประสิทธิภาพดัชนีใน MySQL ฉันไม่ได้เลือกดัชนีเฉพาะเพื่อดำเนินการ (เช่นใน SQL …

3
สร้างตารางจากไฟล์ CSV พร้อมส่วนหัว
ฉันกำลังหาวิธีในการสร้างตาราง MySQL ใหม่โดยอิงจากเนื้อหาของ CSV ที่ระบุเท่านั้น ไฟล์ CSV ที่ฉันจะใช้มีคุณสมบัติดังต่อไปนี้ "|" คั่น แถวแรกระบุชื่อคอลัมน์ (ส่วนหัว) เช่นกัน "|" คั่น ชื่อคอลัมน์และคำสั่งซื้อไม่ได้รับการแก้ไข จำนวนคอลัมน์ไม่คงที่ ไฟล์มีขนาดใหญ่ (1 ล้านแถว / 50 คอลัมน์) ใน Excel ทั้งหมดนี้ค่อนข้างง่าย แต่ด้วย MySQL มันดูเหมือนจะไม่ (ไม่มีโชคกับ Google) ข้อเสนอแนะใด ๆ เกี่ยวกับสิ่งที่ฉันควรจะดู?
12 mysql  csv  import  bulk 

3
สิทธิ์ขั้นต่ำที่จำเป็นในการแก้ไขข้อ จำกัด กุญแจต่างประเทศคืออะไร
สิทธิ์ขั้นต่ำที่จำเป็นในการแก้ไขข้อ จำกัด กุญแจต่างประเทศคืออะไร สคริปต์การย้ายข้อมูลของฉันหยุดทำงานหลังจากMySQL 5.5.41แก้ไขข้อผิดพลาดนี้: InnoDB อนุญาตให้สร้างคีย์ต่างประเทศซึ่งอ้างถึงตารางหลักซึ่งผู้ใช้มีสิทธิ์ไม่เพียงพอ (Bug # 18790730) ฉันได้รับข้อผิดพลาดนี้: SQLSTATE [42000]: ข้อผิดพลาดทางไวยากรณ์หรือการละเมิดการเข้าถึง: คำสั่งอ้างอิง 1142 ปฏิเสธการอ้างอิงถึงผู้ใช้ 'foo' @ 'localhost' สำหรับตาราง 'core.users' (SQL: แก้ไขตาราง `user_baz` เพิ่มข้อ จำกัด user_baz_user_id_foreign คีย์ต่างประเทศ (` user_id`) `core`.`users` (` id`) ในการลบ cascade ในการปรับปรุง cascade) ซึ่งหมายความว่าฉันต้องแก้ไขสิทธิ์ สิทธิ์ขั้นต่ำที่ฉันต้องการคืออะไร
12 mysql 

3
ค่าใช้จ่ายในขั้นตอนภาษา PostgreSQL (plpython / plsql / pllua …)
ฉันพยายามค้นหาข้อมูลเกี่ยวกับฟังก์ชั่นที่ผู้ใช้กำหนด PostgreSQL ในภาษาขั้นตอนการปฏิบัติงานตามเวลาจริง พวกเขาเปรียบเทียบกับฟังก์ชั่นในตัวอย่างไร มีความแตกต่างใด ๆ (ในค่าใช้จ่าย) วิธี Postgres เรียก / จัดการ plpython vs plpgsql vs pllua ฟังก์ชั่น (ฉันสนใจในด้านบูรณาการ Postgres / บริบท / การถ่ายโอนข้อมูลไม่ใช่ VM ตัวเอง)? บริบทเป็นค่าใช้จ่ายใหญ่หรือไม่ ฉันสามารถใช้มันสำหรับการจับคู่ข้อมูลแบบเรียลไทม์ (สมมุติว่า 1,000 ข้อความค้นหา) มีประโยชน์ในการเขียนฟังก์ชั่นที่ผู้ใช้กำหนดใน plpgsql แล้ว pg / ภาษาอื่น ๆ ? ในเอกสารพวกเขาระบุข้อได้เปรียบ แต่ฉันคิดว่าพวกเขาใช้กับภาษาขั้นตอน postgresql ทั้งหมด ผลการวิจัยที่เกี่ยวข้อง: ความเร็วของภาษา PL สำหรับการใช้งานที่ผิดปกติ ประสิทธิภาพการทำงานของภาษา PostgreSQL: C …

2
ปฏิเสธการอนุญาตสำหรับความสัมพันธ์ <table>
ฉันใช้ SQL ต่อไปนี้เป็น psql: CREATE USER bspu LOGIN; CREATE DATABASE bsp OWNER bspu; GRANT ALL PRIVILEGES ON DATABASE bsp TO bspu; \c bsp CREATE TABLE users ( id SERIAL PRIMARY KEY, client_id VARCHAR(20) NOT NULL, api_key VARCHAR(100) NOT NULL, api_secret VARCHAR(100) NOT NULL, auth_token VARCHAR(128) NOT NULL ); เมื่อฉันเข้าสู่ระบบเป็นbspuและพยายามค้นหาusersตารางฉันได้รับข้อผิดพลาด: permission …

1
จำกัด อินพุตให้กับสตริงที่ต่างกันเล็กน้อย
สวัสดีฉันไม่สามารถรับข้อ จำกัด ในการทำงานตามที่ฉันคาดหวังใน postgreSQL จากภายใน pgadmin ฉันรันเคียวรี SQL ต่อไปนี้ -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck"; ALTER TABLE "ComLog" ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes'); COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes'; เมื่อดำเนินการนี้จะถูกแปลงเป็น -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT …

3
วิธีการนับหลายครั้งในหนึ่งแบบสอบถาม?
ฉันนับระเบียนด้วยคำค้นหาเช่น SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%something%' SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%another%' SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%word%' สำหรับการนับแต่ละครั้ง mysql จำเป็นต้องเดินตามตารางและนี่เป็นปัญหาใหญ่หากมีตารางยาวและข้อความค้นหาจำนวนมาก ฉันสงสัยว่ามีวิธีการนับทั้งหมดในหนึ่งแบบสอบถามหรือไม่ ในกรณีนี้เมื่อ mysql เดินผ่านแต่ละแถวมันจะประมวลผลการนับทั้งหมดและไม่จำเป็นต้องสแกนทั้งตารางซ้ำไปซ้ำมา

3
ผลของการมีธุรกรรมเปิดใน MSSQL นานเกินไปคืออะไร?
ฉันแค่สงสัยว่าจะเกิดอะไรขึ้นถ้าคุณเริ่มทำธุรกรรมในฐานข้อมูลและลืมที่จะกระทำหรือย้อนกลับ เซิร์ฟเวอร์จะล่มหรือไม่ ให้บอกว่าคุณทิ้งไว้ 3 วัน นอกจากนี้ยังมีผู้ใช้ที่ใช้งานสมมติว่าผู้ใช้รายอื่นไม่ทราบว่ามีการทำธุรกรรมที่ไม่เปิดเผย (ขอเพียงสมมติว่าผู้ใช้กำลังแทรกข้อมูลในฐานข้อมูล) อะไรคือผลที่ตามมาของการกระทำนี้?

2
เปลี่ยนคอลัมน์ NULL อย่างรวดเร็วเป็น NOT NULL
ฉันมีตารางที่มีแถวเป็นล้านแถวและคอลัมน์ที่อนุญาตให้มีค่า NULL อย่างไรก็ตามในขณะนี้ไม่มีแถวที่มีค่า NULL สำหรับคอลัมน์นั้น (ฉันสามารถตรวจสอบได้อย่างรวดเร็วด้วยแบบสอบถาม) อย่างไรก็ตามเมื่อฉันรันคำสั่ง ALTER TABLE MyTable ALTER COLUMN MyColumn BIGINT NOT NULL; แบบสอบถามใช้เวลาพูดค่อนข้างตลอดไป ใช้เวลาประมาณ 10 ถึง 20 นาทีซึ่งนานกว่าสองเท่าของการเพิ่มข้อ จำกัด การตรวจสอบ มีวิธีอัปเดตข้อมูลเมตาของตารางสำหรับคอลัมน์นั้นทันทีโดยเฉพาะเมื่อฉันรู้ว่าไม่มีแถวใดที่มีค่า NULL สำหรับคอลัมน์นั้น

2
ทำไม io_stall_writes_ms สูงกว่ามากสำหรับ tempdb
เรามีไฟล์ข้อมูลผู้ใช้และระบบในดิสก์ไดรฟ์เดียวกัน (io_stall_write_ms / (1.0 + num_of_writes)) ต่ำกว่า 2 สำหรับไฟล์ผู้ใช้ แต่ไฟล์ tempdb มักจะมีมากกว่า 400 ฉันเห็นว่าในบางเซิร์ฟเวอร์และฉันอยากรู้ว่าถ้ามีเหตุผลที่ใช้เวลานานในการเขียนไปยัง tempdb กว่าไฟล์ข้อมูลฐานข้อมูลปกติ SELECT DISTINCT UPPER(LEFT(mf.physical_name, 1)) AS Directory, ( io_stall_write_ms / ( 1.0 + num_of_writes ) ) as result, io_stall_write_ms, num_of_writes, fs.database_id, fs.[file_id] FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS fs INNER JOIN sys.master_files AS mf ON fs.database_id = …

1
เราสามารถใส่เครื่องหมายเท่ากับ (=) หลังจากฟังก์ชั่นรวมใน Transact-SQL ได้หรือไม่?
ฉันได้พบสคริปต์เช่นนี้: set @sum = sum = (case when somecol1 is null then DATEDIFF(d,[somecol2],somecol3) else 0 end) ฉันไม่เข้าใจความหมายของเครื่องหมายเท่ากับ (=) หลังจากรวมคำหลักที่สอง เมื่อฉันเรียกใช้แบบสอบถามจะไม่แสดงข้อผิดพลาดใด ๆ ทั้งที่มีเครื่องหมายเท่ากับและไม่มี sumฉันต้องการที่จะทราบวัตถุประสงค์ของการวางเครื่องหมายเท่ากับหลังจากคำหลัก นั่นเป็นความผิดพลาดหรือไม่? ขอบคุณ

4
ทางเลือกในการสำรองข้อมูลเครือข่าย
ในสภาพแวดล้อมของเราเรามีเซิร์ฟเวอร์บางตัวที่อยู่ในกลุ่ม Always On Availability และบางเซิร์ฟเวอร์เป็นแบบสแตนด์อโลน ปกติแล้วเราจะสำรองข้อมูลไปยังเครือข่ายที่ใช้ร่วมกัน แต่เมื่อไม่นานมานี้เราได้สังเกตเห็นว่าเมื่อฐานข้อมูลมีขนาดใหญ่ขึ้นเรื่อย ๆ เวลาที่ใช้ก็นานขึ้นซึ่งจะทำให้เครือข่ายทั้งหมดช้าลง สคริปต์ของ Ola hallengren กำลังถูกใช้กับการบีบอัดและยังแยกไฟล์สำรองข้อมูล ฉันกำลังทำการสำรองข้อมูล "เต็มรูปแบบ" ทุกวันเท่านั้น การสำรองข้อมูลจะไปที่ไดรฟ์เครือข่ายแบ่งปัน EMC isilon ฉันไม่เคยพอใจกับ EMC DD Boost ทางเลือกเดียวคือทำการสำรองข้อมูลในเครื่องแล้วคัดลอกไปยังเครือข่ายเดียวกัน มีวิธีที่มีประสิทธิภาพนอกเหนือจากข้างต้นหรือไม่

1
คำว่า "unmentionable" ใน SQL คืออะไร?
คำว่า "unmentionable" ใน SQL คืออะไร? ฉันกำลังอ่านsys.query_store_query_text (Transact-SQL)และฉันเห็นสิ่งต่อไปนี้ดังนั้นฉันจึง google {SQL "unmentionable" คำ} has_restricted_text บิต ข้อความแบบสอบถามมีรหัสผ่านหรือคำอื่น ๆ ที่ไม่สามารถกล่าวถึงได้ ลิงก์อื่น ๆ จากนั้น 3 ลิงก์ที่นำฉันกลับไปยังที่ที่ฉันพบฉันไม่พบสิ่งใดที่แสดงความสัมพันธ์กับรหัสผ่านหรือสิ่งใดก็ตามที่ SQL อาจสนใจ

1
ALTER TABLE หรือไม่ DROP COLUMN เป็นเพียงข้อมูลเมตาดาต้าเท่านั้น
ฉันพบแหล่งข้อมูลหลายแห่งที่ระบุเปลี่ยนแปลงตาราง ... DROP COLUMN เป็นการดำเนินการเฉพาะเมตาดาต้า แหล่ง สิ่งนี้จะเป็นอย่างไร ข้อมูลในระหว่าง DROP COLUMN ไม่จำเป็นต้องถูกลบออกจากดัชนีที่ไม่ใช่คลัสเตอร์และดัชนี / ฮีปคลัสเตอร์หรือไม่? นอกจากนี้เหตุใดMicrosoft Docs จึงบอกเป็นนัยว่าเป็นการดำเนินการที่บันทึกไว้อย่างสมบูรณ์ การปรับเปลี่ยนที่ทำกับตารางจะถูกบันทึกและสามารถกู้คืนได้อย่างสมบูรณ์ การเปลี่ยนแปลงที่ส่งผลกระทบต่อทุกแถวในตารางขนาดใหญ่เช่นลดลงคอลัมน์หรือในบางรุ่นของ SQL Server เพิ่มคอลัมน์ไม่เป็นโมฆะด้วยค่าเริ่มต้นที่สามารถใช้เวลานานในการสร้างที่สมบูรณ์และบันทึกเข้าสู่ระบบจำนวนมาก เรียกใช้คำสั่ง ALTER TABLE เหล่านี้ด้วยความระมัดระวังเช่นเดียวกับคำสั่ง INSERT, UPDATE หรือ DELETE ที่มีผลกับแถวจำนวนมาก ในฐานะที่เป็นคำถามรอง: เครื่องยนต์จะติดตามคอลัมน์ที่ถูกทิ้งได้อย่างไรหากข้อมูลไม่ได้ถูกลบออกจากหน้าเว็บต้นแบบ

1
วิธี "การตรวจสอบตนเอง" ทั้งหมดของสิทธิ์การใช้งานเซิร์ฟเวอร์ SQL ที่องค์กร
ดังนั้นฉันจึงเริ่มงานใหม่กับองค์กรที่ไม่หวังผลกำไรที่ดีซึ่งอยู่ประมาณสองสามทศวรรษ พวกเขามีรุ่นและรุ่นของ SQL Server หลากหลาย (เช่น Express 2005 ถึง 2016 SP2 Enterprise) และข้าม Windows VMs จำนวนมาก (ทุกรุ่นตั้งแต่ปี 2003 ถึง 2016) DBAs ก่อนหน้าไม่ได้ทำเอกสารใด ๆ เกี่ยวกับจำนวนสิทธิ์ใช้งานที่ บริษัท เป็นเจ้าของหรือรุ่นต่าง ๆ ไม่มีบันทึกที่เป็นประโยชน์อย่างมีประสิทธิภาพ ฉันเรียกใช้ชุดเครื่องมือ MAPเพื่อรวบรวมรายละเอียดเกี่ยวกับ SQL Server อย่างน้อยฉันก็มีจุดเริ่มต้นสำหรับเซิร์ฟเวอร์ที่มีอยู่และฉันขุดลงไปซึ่งยังคงให้บริการข้อมูลการผลิต ฉันได้ใช้เครื่องมือApexSQL Discoverใหม่กับผลลัพธ์ที่หลากหลาย (ขอโทษด้วยที่ฉันรักสิ่งของของคุณ แต่ฉันไม่สามารถรอ 3 วันเพื่อให้เครื่องมือนี้ทำงานเมื่อฉันต้องการเพิ่มเซิร์ฟเวอร์ 1 เครื่อง) และdbatools find-dbainstance (ไม่ใช่แฟนตัวยงของการใช้ PS เพื่อส่งออกข้อมูลจำนวนมาก) ดังนั้นโดยรวมทั้งหมดนี้เข้าด้วยกันฉันค่อนข้างมั่นใจ ณ จุดนี้ว่าฉันได้ค้นพบอินสแตนซ์ส่วนใหญ่หรือทั้งหมดที่เคยมีอยู่ในโดเมนนี้ แน่นอนผมได้สอบถามการออกใบอนุญาตในหลายวิธีและทั่วถึงตรวจสอบไร้ประโยชน์อย่างสมบูรณ์ …

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