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

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

1
วิธีสอบถามและเพิ่มมูลค่า (ตัวนับ) ในวิธีที่ปลอดภัยต่อเธรด (หลีกเลี่ยงสภาพการแข่งขัน)
ในตารางที่แต่ละแถวมีเคาน์เตอร์ (เพียงค่าจำนวนเต็ม) ผมจำเป็นต้องได้รับค่าปัจจุบันและเพิ่มขึ้นในเวลาเดียวกัน อย่างมีประสิทธิภาพฉันต้องการทำสิ่งนี้: SELECT counter FROM table WHERE id=123 UPDATE table SET counter=counter+1 WHERE id=123 แต่การทำเช่นนี้เนื่องจากเคียวรีสองรายการนั้นไม่ปลอดภัยสำหรับเธรด: หลายกระบวนการที่ทำสิ่งเดียวกัน (ในแถวเดียวกัน) อาจได้รับค่าตัวนับเดียวกัน ฉันต้องการให้ทุกอย่างไม่ซ้ำกันดังนั้นแต่ละกระบวนการจะได้รับมูลค่าปัจจุบันตามจริงและเพิ่มขึ้นทีละรายการ ฉันสามารถนึกถึงการก่อสร้างที่ฉันใช้การล็อกแบบแมนนวลต่อแถว แต่ฉันสงสัยว่าจะมีวิธีที่ง่ายกว่านี้หรือไม่
10 mysql  locking 

2
PostgreSQL เพิ่มประสิทธิภาพการเพิ่มคอลัมน์ด้วยค่าเริ่มต้นที่ไม่ใช่ค่า NULL หรือไม่
เมื่อเพิ่มNOT NULLคอลัมน์ที่มีDEFAULTค่า - PostgreSQL ปรับการดำเนินการนี้ให้เหมาะสมหรือไม่ ในกรณีที่ตารางมี n แถว, คอลัมน์เปลี่ยนแปลงที่ไม่ได้รับการปรับให้เหมาะสมจะทำให้การเขียน n ของค่าเริ่มต้น - ซึ่งอาจเป็นเรื่องที่เจ็บปวดอย่างมาก ด้วยการปรับให้เหมาะสมฐานข้อมูลจะสร้างคอลัมน์ใหม่ทันทีเก็บเพียงหนึ่งสำเนาของค่าเริ่มต้นซึ่งจะถูกส่งกลับเมื่อไม่พบค่าที่ไม่ใช่ค่าเริ่มต้นสำหรับคอลัมน์นั้นในโครงสร้างข้อมูลดัชนีที่เหมาะสม ตัวอย่างเช่นOracle 11g มีการเพิ่มประสิทธิภาพเช่นนั้น

2
ลำดับของคอลัมน์ในดัชนีรวมใน PostgreSQL (และลำดับการสืบค้น)
ฉันมีตารางที่มี 50K แถว จริงๆแล้วมันเป็นตาราง PostGIS แบบสอบถามมี 4 ส่วน (บังคับ 1 ข้อ) (3 ตัวเลือก) กล่องแยก (สี่เหลี่ยมทางภูมิศาสตร์) ที่มีละติจูด 4 เส้น, ยาว (ฉันใช้ st_intersects) [จำเป็น] ช่วงวันที่ (นาทีสูงสุด) ในฟิลด์วันที่ ประเภทไฟล์ (ชุดของค่าข้อความสูงสุด 8 ค่า) กำลังใช้ IN (..... ) แต่ฉันสามารถสร้างตารางชั่วคราวได้ถ้าต้องการ ฉันเห็นคนจำนวนมากไม่ชอบอิน ประเทศ (ค่าข้อความ) ฉันคาดหวังประมาณ 100 - 4,000 แถวที่ส่งคืน ถ้าฉันสร้างดัชนีผสมบนตารางฉันควรใช้คอลัมน์ใดก่อน เม็ดเล็กละเอียดน่าจะเป็นที่ตั้ง (มีการกระจายข้อมูลไปทั่วโลก) ปัจจุบันฉันมีมันเป็นดัชนีส่วนสำคัญ ดัชนีอื่น ๆ จะเป็น BTREE …

5
จะกำหนด sort_buffer_size ที่เหมาะสมได้อย่างไร?
ฉันอ่านจากไฟล์กำหนดค่าตัวอย่างซึ่งระบุสิ่งต่อไปนี้: # Sort buffer is used to perform sorts for some ORDER BY and GROUP BY # queries. If sorted data does not fit into the sort buffer, a disk # based merge sort is used instead - See the "Sort_merge_passes" # status variable. Allocated per thread if sort is …

2
ฉันจะสร้างคอลัมน์แทนแบบไดนามิกได้อย่างไร
ฉันมีตาราง (ไม่ได้ออกแบบโดยฉัน) ซึ่งมี 20 คอลัมน์ชื่อแตกต่างกัน นั่นคือขึ้นอยู่กับชนิดของระเบียนที่คุณกำลังดูชื่อที่เกี่ยวข้องของคอลัมน์สามารถเปลี่ยนแปลงได้ ชื่อคอลัมน์ที่เป็นไปได้จะถูกเก็บไว้ในอีกตารางหนึ่งซึ่งฉันสามารถสืบค้นได้ง่ายมาก ดังนั้นข้อความค้นหาที่ฉันกำลังมองหาจะเป็นดังนี้: SELECT Col1 AS (SELECT ColName FROM Names WHERE ColNum = 1 and Type = @Type), Col2 AS (SELECT ColName FROM Names WHERE ColNum = 2 and Type = @Type) FROM Tbl1 WHERE Type = @Type เห็นได้ชัดว่าใช้งานไม่ได้ดังนั้นฉันจะได้ผลลัพธ์ที่คล้ายกันได้อย่างไร ' ฉันได้ลองสร้างสตริงข้อความค้นหาแล้วEXECUTEค่อยส่งคืน แต่ก็แค่คืน "Command (s) เสร็จสมบูรณ์แล้ว" …

1
การบังคับใช้ข้อ จำกัด “ ออกไปสองตาราง”
ฉันพบปัญหาในการสร้างแบบจำลองวงจรไฟฟ้าใน SQL โครงสร้างที่ฉันต้องการจะจับคือ part ←────────── pin ↑ ↑ part_inst ←───── pin_inst โดยที่ "inst" สั้นสำหรับ "อินสแตนซ์" ยกตัวอย่างเช่นผมอาจจะมีเป็นpartLM358 op-amp กับpins 1OUT, 1IN-, 1in + GND, 2in + 2IN-, 2OUT และ V CC จากนั้นฉันอาจวางส่วนนี้ลงบนแผนผังสร้างpart_instและ 8 pin_instวินาที ละเว้นเขตข้อมูลความพยายามครั้งแรกของฉันที่ schema คือ create table parts ( part_id bigserial primary key ); create table pins ( pin_id …

1
การใช้เซิร์ฟเวอร์ที่เชื่อมโยงกับ OPENQUERY ในโครงการฐานข้อมูล
ฉันมี SQL Server 2008 ที่ใช้ฐานข้อมูลที่ฉันต้องการจะโยนใน TFS ดังนั้นฉันจึงใช้โครงการฐานข้อมูล Visual Studio 2013 ที่ฉันนำเข้าฐานข้อมูล หลังจากแก้ไขข้อผิดพลาดจำนวนมากฉันติดอยู่กับข้อผิดพลาดเดียวที่เหลืออยู่: ในมุมมองหนึ่ง devs ที่ใช้OPENQUERYในการเข้าถึงเซิร์ฟเวอร์ที่เชื่อมโยง ดังนั้นฉันจึงนำเข้า DACPAC ซึ่งมีฐานข้อมูลที่ถูกต้องและเพิ่มเข้าไปในโครงการโดยใช้Add Database Referenceตัวเลือกการอ้างอิงต่อไปนี้ เวอร์ชันสคริปต์เริ่มต้น นี่คือเวอร์ชันที่สั้นกว่าของการสร้างมุมมองดั้งเดิม: CREATE VIEW dbo.vwStatus AS SELECT StatusID, StatusName FROM OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1 นำไปสู่ข้อผิดพลาดต่อไปนี้: ข้อผิดพลาด 136 SQL71501: มุมมอง: [dbo]. [vwStatus] มีการอ้างอิงที่ไม่ได้แก้ไขไปยังวัตถุ [LinkedServer] ความพยายามครั้งแรก ดังนั้นฉันจึงพยายามแทรกตัวแปรชื่อเซิร์ฟเวอร์ FROM OPENQUERY($(LinkedServer), …

4
มีวิธีที่รวดเร็วในการค้นหาคอลัมน์ทั้งหมดใน SQL Server 2008 R2 ที่เข้ารหัส / มีข้อมูลที่เข้ารหัสหรือไม่
มีวิธีที่รวดเร็วในการค้นหาคอลัมน์ทั้งหมดใน SQL Server 2008 R2 ที่เข้ารหัส / มีข้อมูลที่เข้ารหัสหรือไม่ ฉันต้องการลบล้างข้อมูลในคอลัมน์ที่เข้ารหัสทั้งหมดในเซิร์ฟเวอร์การพัฒนา (ตามกฎทางธุรกิจของเรา) ฉันรู้ว่าส่วนใหญ่ของคอลัมน์เพราะเราใช้พวกเขาเป็นประจำ แต่ฉันต้องการที่จะอย่างละเอียดและฉันต้องการที่จะพิสูจน์ว่าฉันได้พบพวกเขาทั้งหมด ฉันค้นหาเว็บแล้วดูในINFORMATION_SCHEMAและตรวจสอบ DMV ที่ฉันคิดว่าน่าจะมีประโยชน์และยังมีsys.columnsและsys.objects ด้วย - แต่จนถึงตอนนี้ก็ไม่มีโชค

1
ประสิทธิภาพเซิร์ฟเวอร์ MySql ที่ช้า - อะไรและวิธีการตรวจสอบ?
เริ่มต้น: การปฏิเสธความรับผิด ฉันไม่ใช่ MySql Server DBA; ฉันรู้ว่าส่วนใหญ่ของ MSSQL - ซึ่งเป็นเหตุผลที่ฉันต้องการความช่วยเหลือของคุณ สิ้นสุด: ข้อจำกัดความรับผิดชอบ ฉันถูกขอให้ตรวจสอบว่าเหตุใดเอ็นจิ้นเซิร์ฟเวอร์ MySql จึงทำงานได้ไม่ดี - ฉันไม่ได้เห็นหรือไม่มีฐานข้อมูลที่เกี่ยวข้องและต้องการทราบว่าจะเริ่มต้นอย่างไร ฉันจะเริ่มที่ไหน ฉันควรถามคำถามอะไรกับผู้ที่สามารถเข้าถึง MySql ได้ - ฉันไม่รู้ด้วยซ้ำว่าพวกเขากำลังใช้ phpmyadmin หรือเครื่องมืออื่น ๆ เป็นหลัก: ฉันควรถามรายการอะไรและฉันจะตอบกลับแต่ละรายการที่พวกเขาให้ได้อย่างไร ไอเท็มสำคัญที่จะถามเมื่อเกิดปัญหาในการทำงานของฐานข้อมูลคืออะไร? ใน MSSQL ฉันสามารถตรวจสอบsp_who2การเชื่อมต่อที่มีอยู่เพื่อดูว่ามีสิ่งใดที่บล็อกอยู่หรือไม่ * ไม่จำเป็นต้องเจาะจงเนื่องจากอาจมีผลลัพธ์หลายรายการสำหรับแต่ละรายการ แต่ต้องการช่วยให้ลูกบอลกลิ้งเนื่องจากมีผลกระทบต่อผู้ใช้ - เห็นได้ชัดว่าพวกเขาติดตั้งเครื่องยนต์ mysql โดยไม่ต้องมีบอร์ด dba

3
วิธีซ่อนแถวในรายงาน SSRS
ฉันพยายามที่จะคิดออกว่าฉันจะซ่อนแถวเหล่านั้นในรายงานของฉันได้อย่างไรที่การจัดสรรรวมและต้นทุนทั้งหมดในคอลัมน์ทั้งสองเป็น 0 ใน SSRS 2008 ตัวอย่างเช่น: การจัดสรรโดยรวมต้นทุนจริงทั้งหมด 0 0 <---- ซ่อน 100,00 0 <---- อย่าซ่อน 0 50,0000 <---- อย่าซ่อน นี่คือภาพหน้าจอ: ขอบคุณ

3
ฉันจะสร้างตารางด้วยคอลัมน์ที่ใช้ลำดับได้อย่างไร
ฉันมีดังต่อไปนี้ CREATE TABLE [MyTable] ( [ID] [bigint] PRIMARY KEY NOT NULL, [Title] [nvarchar](64) NOT NULL ) CREATE SEQUENCE MyTableID START WITH 1 INCREMENT BY 1 NO CACHE ; GO ฉันต้องการแทรกระเบียนใหม่ใน MyTable และตั้งค่า ID เป็นค่าลำดับถัดไป ฉันจะทำมันได้อย่างไร อาจจะเป็นทริกเกอร์หรือมีวิธีอื่นอีกไหม? อย่างไร? ขณะที่ผมกำลังใช้ SQL Server 2012, ฉันไม่ต้องการที่จะใช้บัตรประจำตัวเนื่องจากมีปัญหาช่องว่าง

1
ไวยากรณ์ของ INNER JOIN ซ้อนอยู่ภายใน OUTER JOIN เปรียบเทียบกับผลการสืบค้น
TLDR; หากคุณดูที่แผนปฏิบัติการ 2 แบบมีคำตอบที่ง่ายกว่ากันหรือไม่? ฉันไม่ได้ตั้งใจสร้างดัชนีเพื่อให้ง่ายต่อการดูว่าเกิดอะไรขึ้น การติดตามคำถามก่อนหน้าของฉันที่เราพบความแตกต่างของประสิทธิภาพการค้นหาระหว่างสไตล์การเข้าร่วมที่แตกต่างกัน (เช่นซ้อนกับดั้งเดิม) ฉันได้ตระหนักว่าไวยากรณ์ที่ซ้อนกันยังปรับเปลี่ยนพฤติกรรมของแบบสอบถาม พิจารณา 2 แบบสอบถามต่อไปนี้ SELECT a.*, m.*, n.* FROM dbo.Autos a LEFT JOIN dbo.Models m JOIN dbo.Manufacturers n -- <-- Nested INNER JOIN ON n.ManufacturerID = m.ManufacturerID ON m.ModelID = a.ModelID สิ่งนี้ไม่จำเป็นต้องทำให้ผู้ผลิตเข้าร่วมเพื่อรวมแถว auto กับ ModelID ที่ไม่ได้อยู่ในตาราง Models การใช้ไวยากรณ์แบบดั้งเดิมเราต้องเปลี่ยนการเข้าร่วมเป็นผู้ผลิตเป็นการรวมภายนอกเช่น ... แต่สิ่งนี้เปลี่ยนแผนแบบสอบถาม SELECT a.*, m.*, …

2
ข้อผิดพลาดในการเปลี่ยนความเป็นเจ้าของฐานข้อมูลจากหน้าไฟล์ในกล่องโต้ตอบคุณสมบัติฐานข้อมูล
ฉันกู้คืนฐานข้อมูลและสร้างผู้ใช้ใหม่ (ผู้ใช้เดียวกันกับที่ฉันเข้าสู่ระบบ) เป็น db_owner ตอนนี้เมื่อฉันต้องการดูแผนภาพฐานข้อมูลมีข้อผิดพลาด ไม่สามารถติดตั้งวัตถุการสนับสนุนไดอะแกรมฐานข้อมูลได้เนื่องจากฐานข้อมูลนี้ไม่มีเจ้าของที่ถูกต้อง หากต้องการดำเนินการต่อให้ใช้ไฟล์หน้าแรกของกล่องโต้ตอบคุณสมบัติฐานข้อมูลหรือคำสั่งแก้ไขการอนุญาตเพื่อตั้งค่าเจ้าของฐานข้อมูลให้เข้าสู่ระบบที่ถูกต้องจากนั้นเพิ่มวัตถุสนับสนุนฐานข้อมูล ตอนนี้เมื่อฉันพยายามเปลี่ยนความเป็นเจ้าของจากหน้าไฟล์ของคุณสมบัติฐานข้อมูลฉันได้รับข้อผิดพลาดเป็น ตั้งเจ้าของไม่สำเร็จสำหรับฐานข้อมูล 'ABC' (Microsoft.SqlServer.SMO) ข้อมูลเพิ่มเติม: มีข้อยกเว้นเกิดขึ้นใน SMO เจ้าของฐานข้อมูลใหม่ที่เสนอ James-PC \ James ถูกแมปในฐานะผู้ใช้ James ในฐานข้อมูลนี้ ชื่อพารามิเตอร์: James-PC \ James " โปรดช่วยฉันแก้ไขปัญหาเพื่อให้ฉันสามารถดูไดอะแกรมฐานข้อมูลบนคอมพิวเตอร์เครื่องนี้หลังจากกู้คืนข้อมูลสำรองฐานข้อมูลจากระบบอื่น

2
การเปิดใช้งาน LOAD DATA LOCAL INFILE ใน mysql
LOAD DATA LOCAL INFILEไม่ได้เปิดใช้งานโดยค่าเริ่มต้น ปกติก็ควรเปิดใช้งานโดยการวางในlocal-infile=1 my.cnfแต่มันไม่ทำงานสำหรับการติดตั้งทั้งหมด จากประสบการณ์ของฉันมันใช้งานได้กับ Debian 7 แต่ไม่ใช่ Debian 7 ขั้นต่ำ แต่การติดตั้งทั้งสองนั้นมาจากแพ็คเกจ deb ที่คอมไพล์แล้ว ทั้งใน OpenVZ VPS วิธีแก้ปัญหาทำไมlocal-infile=1ไม่ทำงานสำหรับการติดตั้งและวิธีการเปิดใช้งานอย่างปลอดภัยLOAD DATA LOCAL INFILE?

2
แบ่ง DBCC CHECKDB ในช่วงหลายวัน
ฉันทำงานเกี่ยวกับการใช้วิธีการของ Paul Randal ในการกระจาย DBCC CHECKDB ด้วยตนเองไปหลายวันสำหรับฐานข้อมูลขนาดใหญ่มากซึ่งโดยทั่วไปประกอบด้วย: การแบ่งตารางในฐานข้อมูลอย่างคร่าว ๆ ระหว่าง 7 ถังข้อมูล รัน DBCC CHECKALLOC สองครั้งต่อสัปดาห์ รัน DBCC CHECKCATALOG สัปดาห์ละครั้ง รัน DBCC CHECKTABLE ในหนึ่งถังในแต่ละวันของสัปดาห์ มีใครใช้เทคนิคนี้หรือไม่? สคริปต์ที่มีอยู่ออกมี? ฉันกังวลว่าสิ่งนี้อาจไม่ครอบคลุมทุกอย่างที่ CHECKDB ทำ หนังสือ Books Online สำหรับ CHECKDBกล่าวว่านอกเหนือจาก CHECKALLOC, CHECKCATALOG และ CHECKTABLE แล้วยัง: ตรวจสอบเนื้อหาของทุกมุมมองที่จัดทำดัชนีในฐานข้อมูล ตรวจสอบความสอดคล้องระดับลิงก์ระหว่างตารางเมตาดาต้าและไดเรกทอรีระบบไฟล์และไฟล์เมื่อเก็บข้อมูล varbinary (สูงสุด) ในระบบไฟล์โดยใช้ FILESTREAM (SQL 2008 เท่านั้น) ตรวจสอบข้อมูล Service …

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