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

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

1
AlwaysOn AG, DTC พร้อม failover
ปัญหา:ฉันจะรัน Distributed Transaction Coordinator (DTC) บนเซิร์ฟเวอร์ทั้งหมดใน AlwaysOn Availability Group (AG) ได้อย่างไร ฉันไม่จำเป็นต้องรักษาการทำธุรกรรมมากกว่าเหตุการณ์ความล้มเหลว / การเปลี่ยนแปลง การติดตั้ง:ฉันมี Windows Failover Cluster (WSFC) ที่มีเซิร์ฟเวอร์ Windows 2008 R2 สามเครื่องซึ่งกำลังทำงาน SQL 2012 ทั้งหมดสองเซิร์ฟเวอร์อยู่ในศูนย์ข้อมูลเดียวและเป็นส่วนหนึ่งของ AlwaysOn Failover Cluster (FCI) ในขณะที่เซิร์ฟเวอร์ตัวที่สามอยู่ใน ศูนย์ข้อมูลที่สอง WSFC เป็นคลัสเตอร์หลายเครือข่ายย่อย นี่คือภาพร่างของการตั้งค่า: ฉันสามารถติดตั้งและกำหนดค่า DTC ให้ทำงานระหว่างสองโหนด FCI ได้เนื่องจากพวกเขาอยู่ในซับเน็ตเดียวกันและใช้ที่เก็บข้อมูลร่วมกัน ฉันกำหนดค่า AG สองสามตัวและพวกเขาทำงานได้ดี ภาพหน้าจอนี้แสดงการติดตั้ง DTC บน FCI: ภาพหน้าจอนี้แสดงให้เห็นว่าฉันสามารถกำหนดค่า DTC …

2
สิ่งที่ max_allowed_packet มีขนาดใหญ่พอและทำไมฉันต้องเปลี่ยนมัน?
ฉันมี MySQL (5.5) ในการตั้งค่า master-slave และสร้างเซิร์ฟเวอร์ทาสอื่น ฉันหยุดทาสต้นฉบับทิ้งข้อมูลคัดลอกและนำเข้าอีกครั้งและทำงานได้ดี ฉันสังเกตเห็น master_log pos ของสลาฟดั้งเดิมและใช้คำสั่งเหล่านี้เพื่อตั้งค่าสลาฟใหม่ CHANGE MASTER TO MASTER_HOST='<ipaddress>', MASTER_USER='<username>', MASTER_PASSWORD='<password>', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000851', MASTER_LOG_POS=15824150, MASTER_CONNECT_RETRY=10; เมื่อฉันเริ่มทาสใหม่ที่ฉันได้รับ Last_IO_Error: มีข้อผิดพลาดร้ายแรง 1236 จากต้นแบบเมื่ออ่านข้อมูลจากบันทึกไบนารี: 'รายการบันทึกเหตุการณ์เกิน max_allowed_packet; เพิ่ม max_allowed_packet ในต้นแบบ ' อย่างไรก็ตามเมื่อฉันเริ่มต้นทาสดั้งเดิมมันก็ไม่เป็นไรและตอนนี้ก็กำลังซิงค์กันอยู่ ดังนั้นคำถาม: ค่าปัจจุบันคือ 16M ฉันจะรู้ได้อย่างไรว่าใหญ่แค่ไหน (ฉันค่อนข้างจะหลีกเลี่ยงการลองผิดลองถูกกับเซิร์ฟเวอร์ที่ใช้งานจริง) ทำไมฉันต้องเพิ่มมูลค่าให้กับนายเมื่อทาสดั้งเดิมถูกจัดการได้ดีปัญหาอาจจะเป็นกับทาสใหม่ได้หรือไม่ ปรับปรุง ฉันเพิ่ม max_allowed_packet เป็น 1073741824 ตามที่ Rolando แนะนำไว้กับเจ้านายทาสเก่าและทาสใหม่และเริ่มต้นใหม่ ( SET GLOBAL …

1
วิ่งรวมไปยังแถวก่อนหน้า
ฉันต้องการความช่วยเหลือเกี่ยวกับฟังก์ชั่นหน้าต่าง ฉันรู้ว่าคุณสามารถคำนวณผลรวมภายในหน้าต่างและผลรวมสะสมภายในหน้าต่าง แต่เป็นไปได้หรือไม่ที่จะคำนวณผลรวมการทำงานก่อนหน้าเช่นผลรวมการรันที่ไม่รวมแถวปัจจุบัน ฉันคิดว่าคุณจะต้องใช้ROWหรือRANGEโต้แย้ง ฉันรู้ว่ามีCURRENT ROWตัวเลือก แต่ฉันต้องการCURRENT ROW - 1ซึ่งเป็นไวยากรณ์ที่ไม่ถูกต้อง ความรู้ROWและRANGEข้อโต้แย้งของฉันมี จำกัด ดังนั้นความช่วยเหลือใด ๆ จะได้รับสุดซึ้ง ฉันรู้ว่ามีหลายโซลูชั่นในการแก้ไขปัญหานี้ แต่ฉันกำลังมองหาที่จะเข้าใจROW, RANGEข้อโต้แย้งและผมถือว่าปัญหาสามารถแตกกับสิ่งเหล่านี้ ฉันได้รวมวิธีที่เป็นไปได้หนึ่งวิธีไว้เพื่อคำนวณผลรวมการวิ่งก่อนหน้า แต่ฉันสงสัยว่ามีวิธีที่ดีกว่านี้หรือไม่: USE AdventureWorks2012 SELECT s.SalesOrderID , s.SalesOrderDetailID , s.OrderQty , SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID) AS RunningTotal , SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID ORDER BY SalesOrderDetailID) - s.OrderQty AS PreviousRunningTotal -- …

8
เกิดข้อผิดพลาดขณะกู้คืนฐานข้อมูลจาก SQL dump
ฉันยังใหม่กับ MySQL และใช้งานบน Windows ฉันพยายามกู้คืนฐานข้อมูลจาก dumpfile ใน MySQL แต่ฉันได้รับข้อผิดพลาดดังต่อไปนี้: $ >mysql -u root -p -h localhost -D database -o < dump.sql ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if …

1
การแก้ไขปัญหา SOS_SCHEDULER_YIELD รอ
ใช้ ERP ในองค์กรของเรา (Dynamics AX 2012) ฉันสังเกตว่าสภาพแวดล้อมการผลิตของเรานั้นช้ากว่าระบบการพัฒนาของเรามาก หลังจากทำกิจกรรมเดียวกันทั้งในสภาพแวดล้อมการพัฒนาและการใช้งานจริงในขณะทำการสืบค้นกลับฉันยืนยันว่าข้อความค้นหา SQL กำลังทำงานช้ามากในสภาพแวดล้อมการผลิตของเราเมื่อเทียบกับการพัฒนา (เฉลี่ย 10-50x ช้ากว่า) ตอนแรกฉันอ้างว่าสิ่งนี้เพื่อโหลดและเรียกใช้กิจกรรมเดียวกันอีกครั้งในสภาพแวดล้อมการผลิตในช่วงนอกเวลาทำงานและพบผลลัพธ์เดียวกันในการติดตาม ฉันล้างสถิติการรอของฉันใน SQL Server แล้วปล่อยให้เซิร์ฟเวอร์ทำงานภายใต้ปริมาณการผลิตตามปกติชั่วครู่หนึ่งจากนั้นเรียกใช้แบบสอบถามนี้: WITH [Waits] AS (SELECT [wait_type], [wait_time_ms] / 1000.0 AS [WaitS], ([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS], [signal_wait_time_ms] / 1000.0 AS [SignalS], [waiting_tasks_count] AS [WaitCount], 100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() …

1
การใช้งานสำเนาจาก STDIN ในภายหลัง
ฉันเพิ่งเริ่มใช้ Postgres และฉันพยายามสร้างตัวอย่างฐานข้อมูลเพื่อทำความเข้าใจการทำงานของมันมองไปรอบ ๆ ฉันพบสคริปต์บางอย่างใน pgfoundry.org ฉันเข้าใจคำสั่งเนื่องจากก่อนหน้านี้ฉันเคยใช้ทั้ง Oracle และ MS-SQL แต่สคริปต์ทั้งหมดที่ฉันใช้กำลังส่งคืนข้อผิดพลาดเมื่อถึงคำสั่ง "COPY FROM" แม่นยำมากขึ้นข้อผิดพลาดจะถูกโยนที่องค์ประกอบแรกที่ควรจะแทรกในตารางที่กำหนด ฉันพยายามเรียกใช้สคริปต์ทั้งในฐานะข้อความค้นหาและเป็น pgScripts แต่ทั้งสองวิธีฉันได้รับข้อผิดพลาดในแถวแรกหลังจากคัดลอกจาก ฉันใช้ pgAdminIII และฉันใช้ StackBuilder เพื่อติดตั้ง PostgreSQL 9.2.4.1 เป็นไดร์เวอร์ฐานข้อมูล ฉันอาจขาดการกำหนดค่าพื้นฐานบางอย่างที่ทำให้ฉันไม่สามารถเรียกใช้คำสั่งนี้ได้หรือฉันไม่เข้าใจว่ามันใช้งานได้หรือไม่? แก้ไข: ข้อผิดพลาดคือ: ERROR: syntax error at or near "7" LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797... ^ ********** Error ********** ERROR: …

2
คีย์ที่ซ้ำกันไม่ทำอะไรเลย
ฉันกำลังแทรกลงในตารางต่อไปนี้โดยใช้ LuaSQL กับ PtokaX API CREATE TABLE `requests` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `ctg` VARCHAR(15) NOT NULL, `msg` VARCHAR(250) NOT NULL, `nick` VARCHAR(32) NOT NULL, `filled` ENUM('Y','N') NOT NULL DEFAULT 'N', `dated` DATETIME NOT NULL, `filldate` DATETIME NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `nick_msg` (`nick`, `msg`), …

3
วิธีค้นหาชื่อคอลัมน์เฉพาะในตารางทั้งหมดใน MySQL Workbench
ใน MySQL Workbench เป็นไปได้ไหมที่จะค้นหาชื่อคอลัมน์ในตารางทั้งหมด? (การเขียนสตริงเพื่อค้นหาในฟิลด์ที่มุมขวาบนไม่ได้ทำอะไรเลย) ขอขอบคุณ.

4
ตาราง Mysqldump ยกเว้นบางฟิลด์
มีวิธีการ mysqldump ตารางที่ไม่มีเขตข้อมูลหรือไม่ ผมขออธิบาย: ฉันมีฐานข้อมูล MySQL testsเรียกว่า ในtestsฉันมี 3 ตาราง: USER, และTOTO TATAผมแค่อยากจะ mysqldump ฟิลด์ของตารางบางUSERดังนั้นไม่รวมเขตข้อมูลบางอย่างเช่นmail, ip_loginฯลฯ ฉันจะทำสิ่งนี้ได้อย่างไร
14 mysql  mysqldump 


4
ดีไม่ดีหรือไม่แยแส: WHERE 1 = 1
เมื่อให้คำถามนี้กับ reddit ฉันได้ล้างคิวรีเพื่อชี้ให้เห็นว่าปัญหาอยู่ที่ไหนในเคียวรี ฉันใช้เครื่องหมายจุลภาคก่อนและWHERE 1=1ทำให้การสืบค้นแก้ไขง่ายขึ้นดังนั้นโดยทั่วไปแล้วข้อความค้นหาของฉันจะเป็นดังนี้: SELECT C.CompanyName ,O.ShippedDate ,OD.UnitPrice ,P.ProductName FROM Customers as C INNER JOIN Orders as O ON C.CustomerID = O.CustomerID INNER JOIN [Order Details] as OD ON O.OrderID = OD.OrderID INNER JOIN Products as P ON P.ProductID = OD.ProductID Where 1=1 -- AND O.ShippedDate Between '4/1/2008' And …

4
การเข้าร่วมได้รับการปรับให้เหมาะสมกับส่วนคำสั่งที่ runtime หรือไม่
เมื่อฉันเขียนแบบสอบถามเช่นนี้ ... select * from table1 t1 join table2 t2 on t1.id = t2.id เครื่องมือเพิ่มประสิทธิภาพ SQL ไม่แน่ใจว่าเป็นคำที่ถูกต้องแปลว่าเป็น ... select * from table1 t1, table2 t2 where t1.id = t2.id โดยพื้นฐานแล้วคำสั่งเข้าร่วมใน SQL Server เป็นวิธีที่ง่ายกว่าในการเขียน sql หรือไม่ หรือใช้จริงในเวลาทำงาน? แก้ไข: ฉันเกือบจะตลอดและจะใช้เข้าร่วมไวยากรณ์ ฉันแค่อยากรู้ว่าเกิดอะไรขึ้น

4
MySQL โหลดข้อมูล INFILE ช้า 80% หลังจากป้อนกิ๊กเล็กน้อยด้วยเครื่องมือ InnoDB
ฉันกำลังโหลดไฟล์ 100GB ผ่าน LOAD DATA INFILE ฉันประสบความสำเร็จกับ MyISAM ไม่กี่ชั่วโมงและทำ ฉันลองใช้ InnoDB ตอนนี้ โหลดเริ่มต้นอย่างรวดเร็วที่มากกว่า 10MB / วินาที (ดูการขยายไฟล์ตารางfile_per_tableเปิดอยู่) แต่หลังจากนั้นประมาณ 5GB ของข้อมูลมันจะช้าลงเป็นช่วง 2-4MB / วินาทีเพราะฉันได้มากกว่า 20GB มันก็ลดลงประมาณ 2MB / วินาที ขนาดบัฟเฟอร์พูล InnoDB คือ 8G และฉันได้ทำสิ่งต่อไปนี้ก่อนที่จะใช้คำสั่งโหลดข้อมูล INFILE: SET @@session.sql_log_bin=0; SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; alter table item_load disable keys; //Run LOAD DATA …

1
วิธีจัดการข้อมูล 3.1 พันล้านแถว
ขณะนี้ฉันได้รับมอบหมายให้ติดตั้งสกีมาหน่วยเก็บข้อมูลสำหรับข้อมูลจำนวนมาก ข้อมูลจะถูกเข้าถึงเป็นหลักเพื่อกำหนดdata pointค่าปัจจุบันแต่ฉันก็ต้องติดตามประวัติหกเดือนที่ผ่านมาสำหรับแนวโน้ม / วิเคราะห์ข้อมูล มีการเพิ่มข้อกำหนดล่าสุดเพื่อติดตามmin/ max/ sumค่าสำหรับชั่วโมงที่ผ่านมา หมายเหตุ: โดยหลักการแล้วฉันต้องการพิจารณาตัวเลือก MongoDB แต่ฉันต้องแสดงให้เห็นว่าฉันได้ใช้ตัวเลือก SQL-Server หมดแล้ว ข้อมูล ตารางต่อไปนี้แสดงถึงแหล่งข้อมูลหลัก (สอบถามบ่อยที่สุด) ตารางจะมีแถวประมาณห้าล้านแถว การเปลี่ยนแปลงข้อมูลส่วนใหญ่จะเป็นUPDATEคำสั่งที่มีข้อความเป็นครั้งคราวมากINSERTหลังจากการโหลดข้อมูลเริ่มต้น ฉันเลือกที่จะจัดกลุ่มข้อมูลตามdataPointIdที่คุณจะเลือกall values for a given data pointเสมอ // Simplified Table CREATE TABLE [dbo].[DataPointValue]( [dataPointId] [int] NOT NULL, [valueId] [int] NOT NULL, [timestamp] [datetime] NOT NULL, [minimum] [decimal](18, 0) NOT NULL, [hourMinimum] …

5
GUID ตามลำดับหรือใหญ่สำหรับตารางฐานข้อมูล 'ใหญ่' PK
ฉันรู้ว่าคำถามประเภทนี้เกิดขึ้นมากมาย แต่ฉันยังไม่ได้อ่านข้อโต้แย้งที่น่าสนใจใด ๆ เพื่อช่วยในการตัดสินใจ กรุณาทนกับฉัน! ฉันมีฐานข้อมูลขนาดใหญ่ - มันเติบโตประมาณ 10,000,000 รายการต่อวัน ข้อมูลมีความสัมพันธ์และสำหรับเหตุผลด้านประสิทธิภาพฉันโหลดตารางด้วย BULK COPY ด้วยเหตุนี้ฉันจำเป็นต้องสร้างคีย์สำหรับแถวและไม่สามารถพึ่งพาคอลัมน์ตัวตน เลขจำนวนเต็ม 64- บิต - ใหญ่ - กว้างพอสำหรับฉันที่จะใช้ แต่เพื่อรับประกันเอกลักษณ์ฉันต้องมีเครื่องกำเนิดส่วนกลางเพื่อสร้าง ID ของฉันให้ฉัน ขณะนี้ฉันมีบริการตัวสร้างซึ่งอนุญาตให้บริการสำรองหมายเลขลำดับ X และรับประกันว่าไม่มีการชนกัน อย่างไรก็ตามผลที่ตามมาก็คือบริการทั้งหมดที่ฉันเชื่อถือได้จากเครื่องกำเนิดไฟฟ้าส่วนกลางนี้และดังนั้นฉันจึงถูก จำกัด ในวิธีที่ฉันสามารถกระจายระบบของฉันและฉันไม่พอใจกับการพึ่งพาอื่น ๆ (เช่นต้องใช้การเข้าถึงเครือข่าย) โดยการออกแบบนี้ นี่เป็นปัญหาในบางโอกาส ตอนนี้ฉันกำลังพิจารณาการใช้ GUID ตามลำดับเป็นคีย์หลักของฉัน (สร้างจาก SQL ภายนอก) เท่าที่ฉันสามารถตรวจสอบได้จากการทดสอบของฉันเองข้อเสียเปรียบเพียงอย่างเดียวคือค่าใช้จ่ายในพื้นที่ดิสก์ของประเภทข้อมูลที่กว้างขึ้น (ซึ่งเป็นที่มาจากการใช้งานในดัชนี) ฉันไม่ได้เห็นการชะลอตัวที่มองเห็นได้ในประสิทธิภาพการค้นหาเมื่อเทียบกับทางเลือกที่ใหญ่ การโหลดตารางด้วย BULK COPY ช้ากว่าเล็กน้อย แต่ไม่มากนัก ดัชนีที่ใช้ GUID …

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