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

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


1
ทำไมข้อความค้นหา sqlite นี้ช้าลงมากเมื่อฉันสร้างดัชนีคอลัมน์
ฉันมีฐานข้อมูล sqlite ที่มีสองตารางแต่ละแถวมี 50,000 แถวมีชื่อ (คน) ปลอม ฉันได้สร้างแบบสอบถามง่ายๆเพื่อค้นหาจำนวนชื่อที่มี (ชื่อที่กำหนด, ชื่อกลาง, นามสกุล) ที่ใช้ร่วมกันสำหรับทั้งสองตาราง: select count(*) from fakenames_uk inner join fakenames_usa on fakenames_uk.givenname=fakenames_usa.givenname and fakenames_uk.surname=fakenames_usa.surname and fakenames_uk.middleinitial=fakenames_usa.middleinitial; เมื่อไม่มีดัชนียกเว้นในคีย์หลัก (ไม่เกี่ยวข้องกับแบบสอบถามนี้) มันจะทำงานอย่างรวดเร็ว: [james@marlon Downloads] $ time sqlite3 generic_data_no_indexes.sqlite "select count(*) from fakenames_uk inner join fakenames_usa on fakenames_uk.givenname=fakenames_usa.givenname and fakenames_uk.surname=fakenames_usa.surname and fakenames_uk.middleinitial=fakenames_usa.middleinitial;" 131 real 0m0.115s …

1
ทำไม Oracle ไม่มี nolock
ใน MS SQL Server nolockสามารถใช้งานได้ตามวัตถุประสงค์ ทำไมเราไม่สามารถใช้มันใน Oracle และ plsql ได้?

2
บีบอัดบนกอง
ต่อไปนี้เป็นย่อหน้าจากMicrosoft เอกสาร : เพจใหม่ที่จัดสรรในฮีปโดยเป็นส่วนหนึ่งของการดำเนินการ DML จะไม่ใช้การบีบอัด PAGE จนกว่าฮีปจะถูกสร้างใหม่ สร้างฮีปอีกครั้งโดยการลบและการนำการบีบอัดมาใช้ใหม่หรือโดยการสร้างและลบดัชนีคลัสเตอร์ ฉันไม่สามารถเข้าใจได้ว่าทำไมถึงเป็นเช่นนี้ หากฉันมีฮีปที่มีการตั้งค่าการบีบอัดที่ระบุเหตุใดจึงไม่ใช้กับเพจที่เป็นของตาราง ขอบคุณ

2
วิธีติดตามการบล็อกที่เกิดขึ้นน้อยกว่าหนึ่งวินาที - SQL Server
ฉันกำลังพยายามแก้ไขปัญหาการบล็อกซึ่งเกิดขึ้นน้อยกว่าหนึ่งวินาที แอปพลิเคชัน OLTP นั้นมีความละเอียดอ่อนมากและต้องมีเวลาตอบสนองน้อยกว่า 200ms สำหรับการทำธุรกรรมบางอย่างตาม SLA ที่ตกลงกันไว้ เรามีปัญหาการเพิ่มระดับการล็อคด้วยการเปิดตัวรหัสใหม่ซึ่งเราสามารถแก้ไขได้ด้วยการลดขนาดแบทช์ในการอัปเดต แม้ว่าจะมีขนาดเล็ก แต่เราสงสัยว่า sp ใหม่บล็อกแถวเดียวกันกับที่ธุรกรรม OLTP กำลังอัปเดต ฉันต้องการค้นหาเซสชันที่กำลังถูกบล็อกและทรัพยากรกำลังรออยู่ ตามความเข้าใจของฉัน "เกณฑ์กระบวนการที่ถูกบล็อก" สามารถตั้งค่าได้อย่างน้อย 1 วินาทีและดังนั้นสิ่งนี้จะไม่จับการบล็อก ฉันกำลังทดลองกับ wait_info และ wait_completed x events มีวิธีอื่นที่เราสามารถติดตามสิ่งนี้ได้หรือไม่ ขอบคุณ

2
แนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับตารางการค้นหาในฐานข้อมูลเชิงสัมพันธ์คืออะไร
ตารางการค้นหา (หรือตารางรหัสตามที่บางคนเรียกพวกเขา) มักจะเป็นชุดของค่าที่เป็นไปได้ที่สามารถกำหนดสำหรับคอลัมน์ที่แน่นอน ตัวอย่างเช่นสมมติว่าเรามีตารางการค้นหาที่เรียกว่าparty(หมายถึงการเก็บข้อมูลเกี่ยวกับพรรคการเมือง) ที่มีสองคอลัมน์: party_code_idnซึ่งเก็บค่าตัวเลขที่ระบบสร้างขึ้นและ (ขาดความหมายโดเมนธุรกิจ ) ทำงานเป็นตัวแทนสำหรับคีย์จริง party_codeเป็นกุญแจจริงหรือ "ธรรมชาติ" ของตารางเนื่องจากจะรักษาค่าที่มีนัยยะของโดเมนธุรกิจ และให้เราบอกว่าตารางดังกล่าวเก็บข้อมูลที่ตามมา: +----------------+------------+ | party_code_idn | party_code | +----------------+------------+ | 1 | Republican | | 2 | Democratic | +----------------+------------+ party_codeคอลัมน์ซึ่งช่วยให้ค่า 'รีพับลิกัน' และ 'ประชาธิปไตย' เป็นสำคัญที่แท้จริงของตารางมีการตั้งค่าที่มีข้อ จำกัด ที่ไม่ซ้ำกัน แต่ผมเลือกที่จะเพิ่มparty_code_idnและกำหนดเป็น PK ของตาราง (แม้ว่าเหตุผลที่พูด , party_codeอาจทำงานเป็นคีย์หลัก [PK]) คำถาม แนวปฏิบัติที่เหมาะสมที่สุดสำหรับการชี้ไปยังค่าการค้นหาจากตารางธุรกรรมคืออะไร ฉันควรสร้างการอ้างอิงต่างประเทศ (FK) อ้างอิงทั้ง(a)โดยตรงกับค่าที่เป็นธรรมชาติและมีความหมายหรือ(b)เพื่อแทนค่า? …

2
เซิร์ฟเวอร์ตอบสนองด้วยแพ็คเก็ตที่ว่างเปล่าในระหว่างการเจรจาเซสชันส่งผลให้ลูกค้าให้ข้อผิดพลาดของแพ็คเก็ตที่ผิดรูปแบบ
ฉันพยายามเชื่อมต่อกับเซิร์ฟเวอร์ mysql ระยะไกล สิ่งนี้เกิดขึ้น 100% ของเวลา ลูกค้า: mysql Ver 14.14 Distrib 5.7.12, สำหรับ เซิร์ฟเวอร์Win32 (AMD64) : 5.0.95 นี่เป็นข้อผิดพลาดที่ฉันได้รับ: C:\>mysql -h example.com -P 3306 -D prod_rcadb -u username -p Enter password: ********** ERROR 2027 (HY000): Malformed packet ข้อผิดพลาดเดียวกันกับ mysqladmin: C:\>mysqladmin -h example.com -P 3306 -u username -p version Enter password: ********** …
14 mysql 

1
ฉันสามารถบอกได้ว่าผู้ใดปรับปรุงฐานข้อมูลของฉันจาก v11 เป็น v12 บน Azure เมื่อใดและใครบ้าง
ก่อนหน้านี้วันนี้ฉันสังเกตเห็นว่าเซิร์ฟเวอร์ฐานข้อมูล Azure SQL ทั้งหมดของฉันซึ่งอัปเดตจาก v11 เป็น v12 ฉันเป็นคนเดียวใน บริษัท ของฉันที่ควรจะแตะหมายเลขเหล่านั้น แต่ไม่ใช่คนเดียวใน บริษัท ของฉันที่เข้าถึงได้ เนื่องจากฉันไม่ได้เริ่มต้นการอัปเกรดนี้ฉันต้องการทราบว่าใครทำและเมื่อมีการอัปเดตที่ไม่ได้วางแผนนี้เกิดขึ้น ฉันรู้ว่าฉันสามารถเขียนอีเมลถึงทุกคนใน บริษัท ของฉันด้วยการเข้าถึงขอWTFสำหรับข้อมูลอย่างสุภาพ แต่ฉันควรเริ่มต้นการสนทนาด้วยข้อเท็จจริงให้มากที่สุด นอกจากนี้ฉันมีแนวโน้มที่จะคิดว่านี่เป็น Microsoft / Azure SNAFU เนื่องจากการอัปเกรดเซิร์ฟเวอร์ทั้งหมดรู้สึกว่าจงใจเกินไป

1
การช่วงชิง TempDB
เรามีฐานข้อมูล OLTP 40GB ที่ใช้งานอยู่บน SQL Server 2014 SP1 พบว่าแบบสอบถามจะช้าเมื่อรอ IO_Completion ความยาวคิวดิสก์ที่เพิ่มขึ้นเป็น 900 และ SQL Server หยุดตอบสนอง สิ่งที่เราพยายาม: รีสตาร์ทอินสแตนซ์และในอีกไม่กี่นาทีมันก็จะเริ่มทำงานในลักษณะเดียวกัน หลังจากรีสตาร์ทครั้งที่สองเราเปลี่ยนขนาดเริ่มต้นของแต่ละ tempdb datafile (มีไฟล์ข้อมูล 16 ไฟล์ที่สร้างขึ้น) และเริ่มทำงานได้อย่างถูกต้อง หมายเหตุ: เรากำลังใช้ตัวแปรตารางสำหรับชุดผลลัพธ์ระดับกลาง ชุดผลลัพธ์เหล่านี้มีขนาดเล็กมาก มันเกิดขึ้นสองครั้งในหนึ่งเดือน ทุกครั้งที่ฉันเพิ่มพื้นที่ว่างเล็กน้อยลงในไฟล์ข้อมูลด้วยตนเองจากนั้นจะเริ่มทำงานตามปกติ สิ่งที่น่าสนใจกว่าก็คือการตั้งค่าเดียวกัน (ฮาร์ดแวร์เดียวกัน, โฟลเดอร์เดียวกันและการตั้งค่าไฟล์, ปริมาณงานเดียวกัน) ที่เรามีใน SQL Server 2008 R2 และ SQL Server 2012 ทำงานได้ดี กรุณาช่วยเราหาวิธีแก้ไขปัญหาอย่างถาวร ขนาดเริ่มต้นของไฟล์ข้อมูลทั้งหมดคือ 1,000MB เดียวกันปัจจุบันเป็นแต่ละไฟล์ 1500MB ทั้งหมดเหมือนกัน …

2
ความรู้สึกและประโยชน์ของการใช้ SqlCommand.Prepare () คืออะไร?
ฉันเจอรหัสนักพัฒนาซอฟต์แวร์ที่ SqlCommand.Prepare () (ดู MSDN)วิธีการใช้อย่างกว้างขวางล่วงหน้าก่อนการดำเนินการของแบบสอบถาม SQL และฉันสงสัยว่าประโยชน์ของสิ่งนี้คืออะไร? ตัวอย่าง: command.Prepare(); command.ExecuteNonQuery(); //... command.Parameters[0].Value = 20; command.ExecuteNonQuery(); ฉันได้เล่นไปรอบ ๆ เล็กน้อยและติดตาม การดำเนินการของคำสั่งหลังจากเรียกPrepare()วิธีทำให้ SQL Server ดำเนินการคำสั่งต่อไปนี้: declare @p1 int set @p1=1 exec sp_prepexec @p1 output,N'@id int,@desc text',N'INSERT INTO dbo.testtable (id) VALUES (@id)',@id=20' select @p1 หลังจากนั้นเมื่อพารามิเตอร์ได้รับมันเป็นค่าและSqlCommand.ExecuteNonQuery()ถูกเรียกต่อไปนี้ได้รับการดำเนินการใน Sql-Server: exec sp_execute 1,@id=20 สำหรับฉันแล้วดูเหมือนว่าคำสั่งจะได้รับการรวบรวมเมื่อPrepare()มีการดำเนินการในไม่ช้า ฉันสงสัยว่าประโยชน์ของสิ่งนี้คืออะไร นี่หมายความว่าใส่ลงในแคชแผนและสามารถนำกลับมาใช้ใหม่ได้ทันทีที่มีการดำเนินการคิวรีสุดท้ายด้วยค่าพารามิเตอร์ที่ต้องการ? ฉันคิดออก (และบันทึกไว้ในคำถามอื่น …

1
การดำเนินการแพคเกจ SSIS จากขั้นตอนการจัดเก็บที่มีสิทธิ์ของผู้ใช้ที่แตกต่างกัน
ฉันมีปัญหากับการอนุญาตให้ผู้ใช้ของฉันเรียกใช้งาน SSIS Packages ในลักษณะที่เหมาะสมเนื่องจากต้องการระดับสิทธิ์ที่แตกต่างกัน สถานการณ์จำลอง : เราได้สร้างคลังข้อมูลด้วยแพคเกจ SSIS ที่แตกต่างกันสองชุดที่รับผิดชอบในการโหลดด้วยข้อมูลหนึ่งชุดจะถูกเรียกใช้โดยอัตโนมัติ (ผ่านงานตัวแทนของ SQL และทำงานได้ดี) และอื่น ๆ ที่ต้องทำงานบน - ความต้องการของผู้ใช้เมื่อข้อมูลขั้นต้นได้รับการสรุปและทำความสะอาดแล้ว แพคเกจนี้ดำเนินการพิเศษที่มีสิทธิพิเศษรวมถึงการสำรองฐานข้อมูลในช่วงเริ่มต้นของการรัน (เพื่อให้แน่ใจว่าแน่ใจ) ปล่อยและสร้างตารางจากการคำนวณเป็นต้น ฉันได้เขียนขั้นตอนการจัดเก็บไว้เพื่อใช้งานนี้ผ่าน [SSISDB] [แคตตาล็อก] [create_execution] และ [SSISDB] [แคตาล็อก] [ขั้นตอนการเริ่มต้น / จัดเก็บ] [วิธีการจัดเก็บเริ่มต้น ... (ฉันเป็นผู้ดูแลระบบ) กระบวนงานที่เก็บไว้ล้มเหลวเมื่อเรียกใช้โดยผู้ใช้ปกติเนื่องจากสิทธิ์ระดับสูงที่จำเป็นใน SSISDB และ MSDB เพื่อจัดคิวการดำเนินการและแพคเกจเองล้มเหลวเนื่องจากกำลังทำงานภายใต้บริบทความปลอดภัย (ต่ำ) สิ่งที่ฉันได้ลอง : ฉันพยายามแก้ไขปัญหาโดยใช้ 'ดำเนินการเป็น' ในขั้นตอนการจัดเก็บอย่างไรก็ตามสิ่งนี้ล้มเหลวเนื่องจากปัญหาการโยงข้ามฐานข้อมูลการตั้งค่าสถานะที่น่าเชื่อถือเป็นต้น ฉันยังพยายามแก้ไขปัญหาด้วยการให้ตัวแทนงานเรียกใช้แพคเกจและเพียงแค่เรียกใช้งานตัวแทนจากขั้นตอนการจัดเก็บ แต่ฉันเข้าสู่โลกแห่งความเจ็บปวดที่เกี่ยวข้องอย่างรวดเร็ว: ไม่สามารถตั้งค่าการอนุญาตให้ใช้งานได้สำหรับแต่ละงาน ความหวังในการกำหนดค่าการเข้าถึงนี้ผ่าน Server บทบาทกลางเพื่อรองรับการเปลี่ยนแปลงพนักงานเมื่อเวลาผ่านไปและงานสามารถมีผู้ใช้เพียงคนเดียวในฐานะเจ้าของ …

3
จะโหลดเซิร์ฟเวอร์ที่เชื่อมโยงใหม่ได้อย่างไร
ฉันใช้ Microsoft SQL Server 2014 Enterprise Edition ปัญหาเกิดขึ้นกับเซิร์ฟเวอร์ที่เชื่อมโยงซึ่งจำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์หรือเพื่อหยุดMSSQLSERVERบริการ เมื่อเซิร์ฟเวอร์ทำงานอีกครั้งเซิร์ฟเวอร์ที่เชื่อมโยง (กับ DB2) จะทำงานไม่ถูกต้องและ SQL Server แสดงข้อผิดพลาดนี้: ข่าวสารเกี่ยวกับ 7302 ระดับ 16 สถานะ 1 บรรทัด 10 ไม่สามารถสร้างอินสแตนซ์ของผู้ให้บริการ OLE DB "DB2OLEDB" สำหรับเซิร์ฟเวอร์ที่เชื่อมโยง "Airspe" หลังจากรีสตาร์ทเซิร์ฟเวอร์หลายครั้งเซิร์ฟเวอร์ที่เชื่อมโยงจะเริ่มทำงาน เหตุใดจึงจำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์หลาย ๆ ครั้งเพื่อติดตั้งเซิร์ฟเวอร์ที่เชื่อมโยง มีวิธีแก้ไขปัญหาอื่น ๆ อีกไหม? นี่คือสคริปต์เพื่อสร้างหนึ่งในเซิร์ฟเวอร์ที่เชื่อมโยง: EXEC master.dbo.sp_addlinkedserver @server = N'AIRS', @srvproduct=N'Microsoft OLE DB Provider for DB2', @provider=N'DB2OLEDB', @datasrc=N'###.###.###.##',@provstr=N'Provider=DB2OLEDB; …

2
INSERTs ขนาดใหญ่ปิดกั้นการเลือก
ฉันมีปัญหากับ INSERT จำนวนมากที่บล็อกการดำเนินการ SELECT ของฉัน schema ฉันมีโต๊ะแบบนี้: CREATE TABLE [InverterData]( [InverterID] [bigint] NOT NULL, [TimeStamp] [datetime] NOT NULL, [ValueA] [decimal](18, 2) NULL, [ValueB] [decimal](18, 2) NULL CONSTRAINT [PrimaryKey_e149e28f-5754-4229-be01-65fafeebce16] PRIMARY KEY CLUSTERED ( [TimeStamp] DESC, [InverterID] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF , IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = …

2
ดัชนีคอลัมน์ที่คำนวณแล้วไม่ได้ใช้
ฉันต้องการค้นหาแบบเร็วโดยดูจากว่ามีสองคอลัมน์เท่ากัน ฉันพยายามใช้คอลัมน์ที่คำนวณด้วยดัชนี แต่ SQL Server ดูเหมือนจะไม่ใช้มัน ถ้าฉันใช้คอลัมน์บิตที่มีค่าคงที่กับดัชนีฉันจะได้ดัชนีที่ต้องการ ดูเหมือนว่ามีคำถามอื่น ๆ เช่นนี้อยู่ที่นั่น แต่ไม่มีใครสนใจว่าทำไมดัชนีจะไม่ถูกใช้ ตารางทดสอบ: CREATE TABLE dbo.Diffs ( Id int NOT NULL IDENTITY (1, 1), DataA int NULL, DataB int NULL, DiffPersisted AS isnull(convert(bit, case when [DataA] is null and [DataB] is not null then 1 when [DataA] <> [DataB] then 1 …

1
วิธีการดัมพ์ฐานข้อมูลทั้งหมดจากรีโมตเซิร์ฟเวอร์บน sequel pro
ฉันมีการเชื่อมต่อฐานข้อมูลกับรีโมตโฮสต์บน SequelPro Mac OSX ฉันจะดัมพ์ฐานข้อมูลทั้งหมดได้อย่างไร ฉันต้องการดัมพ์เหมือนmysqldumpคำสั่งอะไร: $ mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql] ฉันพบตัวเลือกการถ่ายโอนข้อมูลตาราง แต่ฉันต้องการการถ่ายโอนข้อมูลฐานข้อมูลเต็มรูปแบบ
14 mysql  mysqldump 

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