แชร์ผ่าน


วิธีการกําหนดค่าพูล SQL แบบกําหนดเอง โดยใช้ Fabric REST API

นําไปใช้กับ: ✅ จุดสิ้นสุดการวิเคราะห์ SQL และคลังสินค้าใน Microsoft Fabric

พูล SQL แบบกําหนดเองช่วยให้ผู้ดูแลระบบสามารถควบคุมวิธีการจัดสรรทรัพยากรเพื่อจัดการกับคําขอได้มากขึ้น ในการเริ่มต้นใช้งานด่วนนี้ คุณจะกําหนดค่าพูล SQL แบบกําหนดเองและสังเกตค่าตัวแยกประเภทโดยใช้ Fabric REST API

ผู้ดูแลระบบพื้นที่ทํางานสามารถใช้ชื่อแอปพลิเคชัน (หรือชื่อโปรแกรม) จากสตริงการเชื่อมต่อเพื่อกําหนดเส้นทางคําขอไปยังพูลการประมวลผลที่แตกต่างกัน ผู้ดูแลระบบพื้นที่ทํางานยังสามารถควบคุมเปอร์เซ็นต์ของทรัพยากรที่แต่ละพูล SQL คํานวณสามารถเข้าถึงได้ โดยยึดตามขีดจํากัดมาตราส่วนที่ขยายได้ของความจุพื้นที่ทํางาน

Fabric REST API กําหนดจุดสิ้นสุดแบบรวมสําหรับการดําเนินงาน

ข้อกำหนดเบื้องต้น

  • การเข้าถึงสินค้าคลังสินค้าในพื้นที่ทํางาน คุณควรเป็นสมาชิกของบทบาทผู้ดูแลระบบ

รับการกําหนดค่าปัจจุบัน

ใช้ API ต่อไปนี้เพื่อรับการกําหนดค่าปัจจุบัน

ตัวอย่างสมุดบันทึกผ้า

คุณสามารถเรียกใช้โค้ด Python ตัวอย่างต่อไปนี้ในสมุดบันทึก Fabric Spark

  • รหัสจะส่ง GET คําขอไปยัง API การกําหนดค่าพูล SQL แบบกําหนดเอง และส่งคืนการกําหนดค่าพูล SQL แบบกําหนดเองสําหรับพื้นที่ทํางาน
  • workspace_idฟิลด์จะใช้ เพื่อรับ mssparkutils.runtime.context GUID พื้นที่ทํางานที่สมุดบันทึกทํางานอยู่ เมื่อต้องการกําหนดค่าพูล SQL แบบกําหนดเองในพื้นที่ทํางานอื่น ให้อัปเดตเป็น workspace_id GUID ของพื้นที่ทํางานที่คุณต้องการกําหนดค่าพูล SQL แบบกําหนดเอง
import requests
import json
from notebookutils import mssparkutils

# This will get the workspace_id where this notebook is running. 
# Update to the workspace_id (guid) if running this notebook outside of the workspace where the warehouse exists.
workspaceId = mssparkutils.runtime.context.get('currentWorkspaceId') 

url = f'https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/warehouses/sqlPoolsConfiguration?beta=true'
response = requests.request(method='get', url=url, headers={'Authorization': f'Bearer {mssparkutils.credentials.getToken("pbi")}'})

if response.status_code == 200:
    print(json.dumps(response.json(), indent=4))
else:
    print(response.text)

กําหนดค่าพูล SQL แบบกําหนดเอง

ตัวอย่าง Python ต่อไปนี้เปิดใช้งานและกําหนดค่าพูล SQL แบบกําหนดเอง คุณสามารถเรียกใช้โค้ด Python นี้ในสมุดบันทึก Fabric Spark

  • การกําหนดค่าพูล SQL แบบกําหนดเองจะทํางานเฉพาะเมื่อ customSQLPoolsEnabled แอตทริบิวต์ถูกตั้งค่าเป็นจริง คุณสามารถกําหนดเพย์โหลดในข้อกําหนดออบเจ็กต์ customSQLPools แต่ถ้าคุณไม่ได้ตั้งค่า customSQLPoolsEnabled เป็น true เพย์โหลดจะถูกละเว้นและใช้การจัดการปริมาณงานอัตโนมัติ
  • โค้ดกําหนดค่าพูล SQL แบบกําหนดเองสองพูล ContosoSQLPool และAdhocPool
    • ContosoSQLPoolถูกตั้งค่าให้รับ 70% ของทรัพยากรที่มีอยู่ ตัวแยกประเภทชื่อแอปพลิเคชันมีค่าเป็นMyContosoApp
    • คิวรี SQL ทั้งหมดที่มาจากสตริงการเชื่อมต่อที่ระบุ MyContosoApp ชื่อแอปพลิเคชันจะถูกจัดประเภทเป็น ContosoSQLPool พูล SQL แบบกําหนดเอง และมีสิทธิ์เข้าถึง 70% ของโหนดทั้งหมดของความจุแบบขยายได้
    • คิวรี SQL ทั้งหมดที่ไม่มี MyContosoApp ในชื่อแอปพลิเคชันของสตริงการเชื่อมต่อจะถูกส่งไปยัง Adhoc พูล SQL แบบกําหนดเอง ซึ่งถูกกําหนดเป็นพูลเริ่มต้น คําขอเหล่านี้สามารถเข้าถึง 30% ของโหนดทั้งหมดของความจุแบบขยายได้
  • การกําหนดค่าพูล SQL แบบกําหนดเองทั้งหมดต้องมีพูล SQL ดีฟอลต์หนึ่งพูลที่ระบุโดยการตั้งค่าแอ็ตทริบิว isDefault ต์เป็นจริง
  • ผลรวมของค่าทั้งหมด maxResourcePercentage ต้องน้อยกว่าหรือเท่ากับ 100%
  • workspace_idฟิลด์จะใช้ เพื่อรับ mssparkutils.runtime.context GUID พื้นที่ทํางานที่สมุดบันทึกทํางานอยู่ เมื่อต้องการกําหนดค่าพูล SQL แบบกําหนดเองในพื้นที่ทํางานอื่น ให้อัปเดตเป็น workspace_id GUID ของพื้นที่ทํางานที่คุณต้องการกําหนดค่าพูล SQL แบบกําหนดเอง
import requests
import json
from notebookutils import mssparkutils

body = { 
  "customSQLPoolsEnabled": True, 
  "customSQLPools": [ 
    { 
      "name": "ContosoSQLPool", 
      "isDefault": False, 
      "maxResourcePercentage": 70,
      "optimizeForReads": False, 
      "classifier": { 
        "type": "Application Name", 
        "value": [ 
          "MyContosoApp"
        ] 
      } 
    }, 
    { 
      "name": "AdhocPool", 
      "isDefault": True, 
      "maxResourcePercentage": 30,
      "optimizeForReads": True
    } 
  ] 
}

# This will get the workspaceId where this notebook is running. 
# Update to the workspace_id (guid) if running this notebook outside of the workspace where the warehouse exists.
workspace_id = mssparkutils.runtime.context.get('currentWorkspaceId') 

url = f'https://api.fabric.microsoft.com/v1/workspaces/{workspace_id}/warehouses/sqlPoolsConfiguration?beta=true'
response = requests.request(method='patch', url=url, json=body, headers={'Authorization': f'Bearer {mssparkutils.credentials.getToken("pbi")}'})

if response.status_code == 200:
    print("SQL Custom Pools configured successfully.")
else:
    print(response.text)

เคล็ดลับ

ใช้ค่าตัวแยกประเภท ชื่อแอปพลิเคชัน (regex) ที่เป็นประโยชน์เหล่านี้สําหรับการเข้าชมจาก Fabric:

  • หากต้องการจัดประเภทคิวรีจากไปป์ไลน์ Fabric ให้ใช้^Data Integration-to[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$
  • เมื่อต้องการจัดประเภทคิวรีจาก Power BI ให้ใช้^(PowerBIPremium-DirectQuery|Mashup Engine(?: \(PowerBIPremium-Import\))?)
  • เมื่อต้องการจัดประเภทคิวรีจากตัวแก้ไขคิวรี SQL ของพอร์ทัลแฟบริก ให้ใช้DMS_user

ตั้งค่าชื่อโปรแกรมประยุกต์ใน SQL Server Management Studio (SSMS)

ตัวแยกประเภทสําหรับพูล SQL แบบกําหนดเองใช้ชื่อแอปพลิเคชันหรือพารามิเตอร์ชื่อโปรแกรมของสตริงการเชื่อมต่อทั่วไป

  1. ใน SQL Server Management Studio (SSMS) ให้ระบุ ชื่อเซิร์ฟเวอร์สําหรับคลังสินค้า และให้การรับรองความถูกต้อง แนะนําให้ใช้ Microsoft Entra MFA

  2. เลือกปุ่ม ขั้นสูง

  3. ในหน้า คุณสมบัติขั้นสูง ภายใต้ บริบท ให้เปลี่ยนค่าของ ชื่อแอปพลิเคชัน เป็นMyContosoApp

    สกรีนช็อตจาก SQL Server Management Studio ของหน้า คุณสมบัติขั้นสูง ที่มีชื่อโปรแกรมประยุกต์ = MyContosoApp

  4. เลือก ตกลง

  5. เลือก เชื่อมต่อ

  6. หากต้องการสร้างกิจกรรมตัวอย่าง ให้ใช้การเชื่อมต่อนี้ใน SSMS เพื่อเรียกใช้คิวรีอย่างง่ายในคลังสินค้าของคุณ ตัวอย่างเช่น:

    SELECT *
    FROM dbo.DimDate;
    

สังเกตข้อมูลเชิงลึกของคิวรีสําหรับพูล SQL แบบกําหนดเอง

  1. ตรวจทาน sys.dm_exec_sessions มุมมองการจัดการแบบไดนามิกเพื่อดูว่า MyContosoApp ได้รับการยอมรับว่าเป็นชื่อแอปพลิเคชันที่ส่งผ่านจาก SSMS ไปยังกลไกจัดการ SQL

    SELECT session_id, program_name
    FROM   sys.dm_exec_sessions
    WHERE  program_name = 'MyContosoApp';
    

    เช่น:

    สกรีนช็อตจาก SQL Server Management Studio ที่แสดงผลลัพธ์ของคิวรีบน sys.dm_exec_sessions และเซสชันที่ระบุโดยชื่อโปรแกรม MyContosoApp

  2. เนื่องจาก program_name ตรงกับชื่อโปรแกรมประยุกต์ใน MyContosoApp พูล SQL แบบกําหนดเอง แบบสอบถามนี้จึงใช้ทรัพยากรในพูลนั้น เมื่อต้องการพิสูจน์ว่าคิวรีใช้พูล SQL แบบกําหนดเองใด คุณสามารถคิวรีมุมมองระบบ queryinsights.exec_requests_history รอ 10-15 นาทีเพื่อให้ข้อมูลเชิงลึกของคิวรีเติมข้อมูล แล้วเรียกใช้คิวรีต่อไปนี้

    SELECT distributed_statement_id, submit_time, 
           program_name, sql_pool_name, start_time, end_time
    FROM   queryinsights.exec_requests_history 
    WHERE  program_name = 'MyContosoApp';
    
  3. คุณยังสามารถระบุพูลของคิวรีได้ด้วยรหัสใบแจ้งยอด ในตัว แก้ไขคิวรี SQL ของพอร์ทัลแฟบริค ให้เรียกใช้คิวรีกับคลังสินค้าหรือจุดสิ้นสุดการวิเคราะห์ SQL ของคุณ

    SELECT *
    FROM dbo.DimDate;
    
  4. เลือกแท็บ ข้อความ และบันทึก รหัสใบแจ้งยอด สําหรับการดําเนินการคิวรี ในตัวแก้ไขแบบสอบถาม SQL คือ program_nameDMS_userซึ่งคุณกําหนดค่าให้ใช้ MyContosoApp พูล SQL แบบกําหนดเองก่อนหน้านี้

  5. รอ 10-15 นาทีเพื่อให้ข้อมูลเชิงลึกของคิวรีเติมข้อมูล

  6. ดึงข้อมูลและ sql_pool_name ข้อมูลอื่น ๆ เพื่อตรวจสอบว่ามีการใช้พูล SQL แบบกําหนดเองที่เหมาะสม

    SELECT distributed_statement_id, submit_time, 
           program_name, sql_pool_name, start_time, end_time
    FROM   queryinsights.exec_requests_history 
    WHERE  distributed_statement_id = '<Statement ID>';
    

แปลงกลับการกําหนดค่าพูล SQL แบบกําหนดเอง

เมื่อต้องการคืนพื้นที่ทํางานกลับสู่สถานะเดิม ให้เปลี่ยนคุณสมบัติเป็นcustomSQLPoolsEnabledFalse ถ้าคุณต้องการรักษาการกําหนดค่าพูล SQL แบบกําหนดเอง คุณต้องส่งชื่อพูลแต่ละชื่อตาม customSQLPools ในรายการ

โค้ด Python ตัวอย่างนี้จะปิดใช้งานพูล SQL แบบกําหนดเองและเปลี่ยนกลับเป็นการกําหนดค่าการจัดการปริมาณงานอัตโนมัติของ SELECT พูลและไม่ใช่SELECT พูล PATCHมีการเรียกใช้คําขอโดยตั้งค่าคุณสมบัติเป็นcustomSQLPoolsEnabledFalse

import requests
import json
from notebookutils import mssparkutils

body = { 
  "customSQLPoolsEnabled": False, 
  "customSQLPools": [] 
}

# This will get the workspaceId where this notebook is running. 
# Update to the workspace_id (guid) if running this notebook outside of the workspace where the warehouse exists.
workspace_id = mssparkutils.runtime.context.get('currentWorkspaceId') 

url = f'https://api.fabric.microsoft.com/v1/workspaces/{workspace_id}/warehouses/sqlPoolsConfiguration?beta=true'
response = requests.request(method='patch', url=url, json=body, headers={'Authorization': f'Bearer {mssparkutils.credentials.getToken("pbi")}'})

if response.status_code == 200:
    print("SQL Custom Pools successfully disabled.")
else:
    print(response.text)