నా SQL క్వెరీ ప్రొడక్షన్‌లో మాత్రమే ఎందుకు నెమ్మదిగా ఉంది?

నా SQL క్వెరీ ప్రొడక్షన్‌లో మాత్రమే ఎందుకు నెమ్మదిగా ఉంది?

Parameter Sniffing ట్రాప్‌ను అర్థం చేసుకోవడం

ఇది ఏ డెవలపర్‌కైనా నిరాశపరిచే పరిస్థితి. యాప్‌లోని ఒక ఫీచర్ హ్యాంగ్ అవుతోందని ఒక యూజర్ రిపోర్ట్ చేస్తారు. అప్లికేషన్ ఎగ్జిక్యూట్ చేసిన ఖచ్చితమైన SQL క్వెరీని మీరు తీసుకుని, దానిని SQL Server Management Studio (SSMS) లో పేస్ట్ చేసి, Execute పై క్లిక్ చేస్తారు. ఇది కేవలం 0.02 సెకన్లలో పూర్తవుతుంది. మీరు దానిని మళ్ళీ రన్ చేస్తారు. అది ఇప్పటికీ చాలా వేగంగా పనిచేస్తుంది. అయినప్పటికీ, అప్లికేషన్ లోపల, అది టైమ్‌అవుట్ అవుతూనే ఉంటుంది. ఈ పరిస్థితి తరచుగా parameter sniffing అని పిలిచే ఒక సాధారణ సమస్యను సూచిస్తుంది.

ఈరోజు ఆగస్టు 10, 2026, మరియు డేటాబేస్ ఆధారిత అప్లికేషన్‌లతో పనిచేసే డెవలపర్‌లకు parameter sniffing గురించి అర్థం చేసుకోవడం చాలా ముఖ్యం. అప్లికేషన్‌లు పెరిగేకొద్దీ మరియు డేటా డిస్ట్రిబ్యూషన్‌లు మారేకొద్దీ, ముఖ్యంగా ప్రొడక్షన్ ఎన్విరాన్‌మెంట్‌లలో పెర్ఫార్మెన్స్ సమస్యలు రావచ్చు.

Parameter Sniffing అంటే ఏమిటి?

ఒక పారామీటరైజ్డ్ క్వెరీ లేదా stored procedure మొదటిసారి రన్ అయినప్పుడు, SQL Server ఆ సమయంలో పాస్ చేసిన పారామీటర్‌లను పరిశీలిస్తుంది. ఎన్ని రోలు (rows) తిరిగి వస్తాయో అంచనా వేయడానికి అది ఈ విలువలను ఉపయోగిస్తుంది మరియు ఆ నిర్దిష్ట పరిస్థితికి తగినట్లుగా ఒక execution plan ను కంపైల్ చేస్తుంది. ఈ execution plan భవిష్యత్తు ఉపయోగం కోసం క్యాష్ (cached) చేయబడుతుంది.

అయితే, ఇది సమస్యలకు దారితీయవచ్చు. ఉదాహరణకు:

  • Scenario A: మొదటి రన్ 5 రోలను తిరిగి ఇచ్చే పారామీటర్‌ను పాస్ చేస్తుంది. SQL Server వేగవంతమైనది మరియు సమర్థవంతమైనదైన Index Seek ను ఉపయోగించి ఒక ప్లాన్‌ను క్రియేట్ చేస్తుంది.
  • Scenario B: తరువాత, మరొక యూజర్ 500,000 రోలను తిరిగి ఇచ్చే పారామీటర్‌ను పాస్ చేస్తారు. SQL Server పరిమాణంలో పెద్దదైన ఈ డేటాసెట్‌కు తగినది కాని Scenario A నుండి క్యాష్ చేసిన ప్లాన్‌ను తిరిగి ఉపయోగిస్తుంది. సర్వర్ పెద్ద డేటాసెట్‌కు లైట్‌వెయిట్ ప్లాన్‌ను అప్లై చేయడానికి తీవ్రంగా శ్రమిస్తుంది, దీనివల్ల స్లో పెర్ఫార్మెన్స్ లేదా టైమ్‌అవుట్‌లు కూడా సంభవిస్తాయి.

Parameter Sniffing సమస్యలను ఎలా గుర్తించాలి

క్యాష్‌లో తప్పుడు execution plans ను పట్టుకోవడానికి, మీరు plan cache ను పరిశీలించవచ్చు. కంపైలేషన్ మరియు ఎగ్జిక్యూషన్ సమయాల్లో ఏ పారామీటర్ విలువలు ఉపయోగించబడ్డాయో చూడటానికి ఇది మీకు సహాయపడుతుంది. ఊహించిన దానికంటే నెమ్మదిగా రన్ అవుతున్న క్వెరీలను కనుగొనడానికి మీరు ఉపయోగించగల శీఘ్ర SQL కమాండ్ ఇక్కడ ఉంది:

SELECT TOP 10 qs.execution_count AS [Exec_Count],
    (qs.total_elapsed_time / 1000.0) / qs.execution_count AS [Avg_Duration_ms],
    (qs.total_worker_time / 1000.0) / qs.execution_count AS [Avg_CPU_ms],
    qs.total_logical_reads / qs.execution_count AS [Avg_Logical_Reads],
    SUBSTRING(st.text, (qs.statement_start_offset / 2) + 1,
    ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2) + 1) AS [Query_Text],
    qp.query_plan AS [XML_Execution_Plan]
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
WHERE qs.execution_count > 5
ORDER BY (qs.total_elapsed_time / qs.execution_count) DESC;

మీరు ఈ కమాండ్‌ను రన్ చేసినప్పుడు, మీరు XML_Execution_Plan కాలమ్‌పై క్లిక్ చేసి SSMS లో అసలైన గ్రాఫికల్ execution plan ను చూడవచ్చు. ప్రాపర్టీస్ విండో లోపల ఉన్న Parameter List కోసం చూడండి; ఇది Compiled Value వర్సెస్ Runtime Value ను చూపుతుంది. ఈ విలువలు చాలా భిన్నంగా ఉంటే, మీరు మీ parameter sniffing కారణాన్ని కనుగొన్నట్లే.

Parameter Sniffing ను ఎలా పరిష్కరించాలి

మీ SQL Server వెర్షన్ మరియు నిర్దిష్ట బిజినెస్ కాంటెక్స్ట్ ఆధారంగా, parameter sniffing ను పరిష్కరించడానికి అనేక వ్యూహాలు ఉన్నాయి:

  • జోడించండి OPTIMIZE FOR UNKNOWN: ఈ క్వెరీ హింట్ నిర్దిష్ట పారామీటర్ విలువల ప్రకారం కాకుండా, మరింత జనరిక్ ప్లాన్‌ను క్రియేట్ చేయమని SQL Server కు చెబుతుంది.
  • Local Variables ఉపయోగించండి: Stored procedures లో పారామీటర్‌లను నేరుగా ఉపయోగించడానికి బదులుగా, local variables SQL Server కు మరింత మెరుగైన ప్లాన్‌ను రూపొందించడంలో సహాయపడతాయి.
  • పాతబడిపోయిన Index Statistics ను అప్‌డేట్ చేయండి: మీ స్టాటిస్టిక్స్ (statistics) ను అప్‌డేట్‌గా ఉంచడం వల్ల SQL Server execution plans గురించి మెరుగైన నిర్ణయాలు తీసుకోవడానికి సహాయపడుతుంది.
  • Query Store ఉపయోగించండి: ఎనేబుల్ చేసి ఉంటే, Query Store మీ క్వెరీల కోసం తెలిసిన మంచి ప్లాన్‌ను బలవంతంగా వర్తింపజేయడానికి (force చేయడానికి) సహాయపడుతుంది.

ముగింపు

Parameter sniffing అనేది ప్రొడక్షన్ ఎన్విరాన్‌మెంట్‌లలో పెర్ఫార్మెన్స్ సమస్యలకు దారితీసే ఒక సంక్లిష్టమైన సమస్య కావచ్చు. ఇది ఎలా పనిచేస్తుందో మరియు దీనిని ఎలా గుర్తించి పరిష్కరించాలో అర్థం చేసుకోవడం ద్వారా, మీరు మీ SQL క్వెరీల పెర్ఫార్మెన్స్‌ను మెరుగుపరచవచ్చు.

ప్రయోజనాలు

  • నెమ్మదిగా నడిచే క్వెరీలను సమర్థవంతంగా గుర్తించడంలో సహాయపడుతుంది.
  • Execution plans గురించిన అంతర్దృష్టులను అందిస్తుంది.
  • పరిష్కారం కోసం బహుళ వ్యూహాలను అందిస్తుంది.

లోపాలు

  • SQL Server అంతర్గత విషయాల (internals) పట్ల అవగాహన అవసరం.
  • నిర్దిష్ట దృశ్యాల ఆధారంగా సర్దుబాట్లు చేయాల్సి రావచ్చు.
  • SQL Server వెర్షన్‌ను బట్టి పరిష్కారాలు మారవచ్చు.

హెచ్చరిక

ఈ వ్యాసం విద్యా ప్రయోజనాల కోసం మాత్రమే. వీటిపై ఆధారపడే ముందు ఎల్లప్పుడూ ఏవైనా ప్లేస్‌హోల్డర్ విలువలను మీ అసలైన డేటాతో భర్తీ చేయండి మరియు ఒరిజినల్ సోర్స్‌ల నుండి క్లెయిమ్‌లను సరిచూసుకోండి.

తరచుగా అడిగే ప్రశ్నలు

  • Parameter sniffing అంటే ఏమిటి? — క్వెరీ యొక్క మొదటి ఎగ్జిక్యూషన్ నుండి వచ్చిన పారామీటర్ విలువలను ఉపయోగించి SQL Server క్యాష్ చేసిన execution plan ను క్రియేట్ చేయడాన్నే Parameter sniffing అంటారు, ఇది తదుపరి ఎగ్జిక్యూషన్‌లకు తగినదిగా ఉండకపోవచ్చు.
  • Parameter sniffing వల్ల క్వెరీలు ఎందుకు నెమ్మదిగా రన్ అవుతాయి? — క్యాష్ చేసిన execution plan తదుపరి ఎగ్జిక్యూషన్‌ల డేటా పరిమాణం లేదా డిస్ట్రిబ్యూషన్‌కు తగినది కానప్పుడు, అది క్వెరీలు నెమ్మదిగా రన్ అవ్వడానికి దారితీస్తుంది.
  • Parameter sniffing సమస్యలను నేను ఎలా గుర్తించగలను? — తేడాలను గుర్తించడానికి మీరు plan cache ను పరిశీలించి, కంపైల్ చేసిన పారామీటర్ విలువలను రన్‌టైమ్ విలువలతో పోల్చవచ్చు.
  • Execution plan అంటే ఏమిటి? — Execution plan అనేది SQL Server ఒక క్వెరీని ఎగ్జిక్యూట్ చేయడానికి ఉపయోగించే రోడ్‌మ్యాప్, ఇది డేటాను ఎలా పొందాలో వివరంగా తెలియజేస్తుంది.
  • Parameter sniffing ను నేను ఎలా పరిష్కరించగలను? — మీరు వీటి వంటి టెక్నిక్‌లను ఉపయోగించి దీనిని పరిష్కరించవచ్చు OPTIMIZE FOR UNKNOWN, local variables, statistics ని అప్‌డేట్ చేయడం లేదా Query Store ని ఉపయోగించడం.
  • Parameter sniffing అన్ని SQL Server వెర్షన్‌లపై ప్రభావం చూపుతుందా? — అవును, ముఖ్యంగా డేటా డిస్ట్రిబ్యూషన్‌లు సమానంగా లేనప్పుడు, parameter sniffing వివిధ SQL Server వెర్షన్‌లపై ప్రభావం చూపుతుంది.

ట్యాగ్‌లు

#database #sql #performance #queryoptimization #parametersniffing #sqlserver #executionplan #databases

Free field guide

API Security Testing Checklist

A practical workflow for testing authentication, authorization, input handling, business logic, and evidence without losing track of scope.