Network Management
SolarWinds Platform Web Console Becomes Slow or Unresponsive After Adding SD-WAN Orchestrator Node (Blocking Query Issue)
This article provides information about a performance issue where the SolarWinds Platform Web Console becomes slow or unresponsive after adding an SD-WAN Orchestrator node (e.g., VeloCloud). The root cause is a blocking SQL query triggered during automatic Map generation.
First published date
Last published date
Overview
In certain environments using SD-WAN integration, users may experience the following symptoms shortly after adding an SD-WAN Orchestrator node to SolarWinds:
- The web console becomes very slow or unresponsive.
- Users may be unable to load node details pages or dashboards.
- Database monitoring tools (such as DPA or sp_WhoIsActive) show a long-running query with 200+ blocked sessions.
- The blocking session originates from the SolarWindsDatabaseUser account and is executed by the InformationService v3 process on the Main Polling Engine.
- The query typically involves the following tables:
- NodesData
- NodesStatistics
- OrionServers
Example blocking query:
SELECT [T5].[AgentPort] AS C105, [T5].[Allow64BitCounters] AS C106, [T6].[AvgResponseTime] AS C107, DateAdd(second,DateDiff(second,GetDate(),GetUtcDate()),[T5].[BlockUntil]) AS C108, [T6].[BufferBgMissThisHour] AS C109, [T6].[BufferBgMissToday] AS C110, [T6].[BufferHgMissThisHour] AS C111, [T6].[BufferHgMissToday] AS C112, [T6].[BufferLgMissThisHour] AS C113, [T6].[BufferLgMissToday] AS C114, [T6].[BufferMdMissThisHour] AS C115, [T6].[BufferMdMissToday] AS C116, [T6].[BufferNoMemThisHour] AS C117, [T6].[BufferNoMemToday] AS C118, [T6].[BufferSmMissThisHour] AS C119, [T6].[BufferSmMissToday] AS C120, [T5].[CMTS] AS C121, [T6].[CPUCount] AS C122, [T6].[CPULoad] AS C123, [T5].[Caption] AS C124, [T5].[EffectiveCategory] AS C125, [T5].[ChildStatus] AS C126, [T5].[Community] AS C127, [T5].[Contact] AS C128, DateAdd(second,DateDiff(second,GetDate(),GetUtcDate()),[T6].[CustomPollerLastStatisticsPoll]) AS C129, DateAdd(second,DateDiff(second,GetDate(),GetUtcDate()),[T6].[CustomPollerLastStatisticsPollSuccess]) AS C130, [T5].[CustomStatus] AS C131, [T5].[DNS] AS C132, [T5].[MachineType] AS C133, '/Orion/NetPerfMon/NodeDetails.aspx?NetObject=N:' + CONVERT(nvarchar(max),[T5].[NodeID]) AS C134, [T5].[Caption] AS C135, [T5].[DynamicIP] AS C136, [T5].[EngineID] AS C137, [T5].[EntityType] AS C138, [T5].[External] AS C139, [T5].[GroupStatus] AS C140, [T5].[IOSImage] AS C141, [T5].[IOSVersion] AS C142, [T5].[IP_Address] AS C143, [T5].[IP_Address] AS C144, [T5].[IPAddressGUID] AS C145, [T5].[IP_Address_Type] AS C146, [T5].[IP_Address] AS C147, [T5].[VendorIcon] AS C148, CASE WHEN ([T7].[OrionServerID] IS NOT NULL) THEN CAST(1 as bit) ELSE CAST(0 as bit) END AS C149, [T5].[IsServer] AS C150, DateAdd(second,DateDiff(second,GetDate(),GetUtcDate()),[T6].[LastBoot]) AS C151, DateAdd(second,DateDiff(second,GetDate(),GetUtcDate()),[T6].[LastSync]) AS C152, [T6].[LastSystemUpTimePollUtc] AS C153, [T6].[LoadAverage1] AS C154, [T6].[LoadAverage15] AS C155, [T6].[LoadAverage5] AS C156, [T5].[Location] AS C157, [T5].[MachineType] AS C158, [T6].[MaxResponseTime] AS C159, CASE [T5].[TotalMemory] WHEN -2 THEN NULL ELSE CASE [T6].[MemoryUsed] WHEN -2 THEN NULL ELSE [T5].[TotalMemory] - [T6].[MemoryUsed] END END AS C160, [T6].[MemoryUsed] AS C161, [T6].[MinResponseTime] AS C162, DateDiff(minute,DateAdd(second,DateDiff(second,GetDate(),GetUtcDate()),[T6].[LastSync]),GetUtcDate()) AS C163, CASE WHEN [T5].[Description] LIKE '%router%' THEN 'router' WHEN [T5].[Description] LIKE '%balancer%' THEN 'load-balancer' WHEN ([T5].[Description] LIKE '% asa %') OR ([T5].[Description] LIKE '%firewall%') OR ([T5].[Description] LIKE '%sonicwall%') THEN 'firewall' WHEN ([T5].[Description] LIKE '%wireless%') OR ([T5].[Description] LIKE '%cisco air%') THEN 'wirelesscontroller' WHEN ([T5].[Description] LIKE '%switch%') OR ([T5].[Description] LIKE '%cisco%') OR ([T5].[Description] LIKE '%catalyst%') THEN 'l2l3switch' WHEN ([T5].[Description] LIKE '%hyper%') AND ([T5].[Description] LIKE '%server%') THEN 'hypervhost' WHEN ([T5].[Description] LIKE '%hyper%') AND ([T5].[Description] LIKE '%cluster%') THEN 'hypervcluster' WHEN ([T5].[Description] LIKE '%hyper%') AND ([T5].[Description] LIKE '%host%') THEN 'hypervhost' WHEN [T5].[EffectiveCategory] = 2 THEN 'server' WHEN [T5].[EffectiveCategory] = 1 THEN 'network-device' WHEN [T5].[EffectiveCategory] = 0 THEN 'virtualmachine' ELSE 'unknownnode' END AS C164, DateAdd(second,DateDiff(second,GetDate(),GetUtcDate()),[T6].[NextPoll]) AS C165, DateAdd(second,DateDiff(second,GetDate(),GetUtcDate()),[T6].[NextRediscovery]) AS C166, [T5].[Description] AS C167, [T5].[NodeID] AS C168, [T5].[Caption] AS C169, [T5].[NodeId] AS C170, [T5].[NodeId] AS C171, [T5].[ObjectSubType] AS C172, 'NodeID' AS C173, 'N:' AS C174, [T6].[PercentLoss] AS C175, CASE WHEN [T6].[PercentMemoryUsed] < 0 THEN NULL ELSE 100 - [T6].[PercentMemoryUsed] END AS C176, [T6].[PercentMemoryUsed] AS C177, [T5].[PollInterval] AS C178, [T5].[PolledStatus] AS C179, [T5].[RWCommunity] AS C180, [T5].[RediscoveryInterval] AS C181, [T6].[ResponseTime] AS C182, [T5].[SNMPVersion] AS C183, [T5].[Severity] AS C184, DateDiff(second,DateAdd(second,DateDiff(second,GetDate(),GetUtcDate()),[T6].[LastSync]),GetUtcDate()) / [T5].[PollInterval] AS C185, [T5].[StatCollection] AS C186, [T5].[Status] AS C187, [T5].[StatusDescription] AS C188, [T5].[GroupStatus] AS C189, [T5].[StatusLED] AS C190, [T5].[SysName] AS C191, [T5].[SysObjectID] AS C192, [T6].[SystemUpTime] AS C193, [T5].[TotalMemory] AS C194, CASE [T5].[ChildStatus] WHEN 2 THEN 3000000 WHEN 3 THEN 2000000 WHEN 0 THEN 1000000 ELSE 0 END + [T5].[Severity] AS C195, [T5].[Vendor] AS C196, [T5].[VendorIcon] AS C197, '/Orion/NetPerfMon/NodeDetails.aspx?NetObject=N:' + CONVERT(nvarchar(max),[T5].[NodeID]) + '' AS C198, [T5].[Caption] + '' AS C199, NULL AS C200, NULL AS C201, [T5].[UnManageFrom] AS C202, [T5].[UnManageUntil] AS C203, [T5].[UnManaged] AS C204, 0 AS C205, 'Orion.Nodes' AS C206, 'swis://SOLARWINDSSERVER./Orion/Orion.Nodes' + '/NodeID=' + CONVERT(nvarchar(max),[T5].[NodeID]) AS C207
FROM dbo.NodesData AS T5
INNER JOIN dbo.NodesStatistics AS T6 WITH(NOLOCK) ON [T6].[NodeID] = [T5].[NodeID]
LEFT JOIN dbo.OrionServers AS T7 ON [T7].[NodeID] = [T5].[NodeID] AND 0 = 0
The blocking can be observed using sp_WhoIsActive or SQL Activity Monitor.
Product section
Cause
This issue occurs due to one or more of the following causes:
- The Map generation process is automatically triggered after adding an SD-WAN Orchestrator.
- The related queries in SdWanEntityDal.cs do not use WithNoLock(), resulting in locking/blocking behavior.
- SQL function 01_IsOrchestratorApiOnlyNode.sql is also involved and lacks optimization.
- Blocking affects polling updates, UI responsiveness, and general platform health.
Resolution
A fix for this issue is now available in the 2025.2.1 Service Release. If you do not wish to upgrade at this time, we recommend applying the suggested workaround as an interim solution.
- For SolarWinds Platform 2025.1.1 customers, a Buddy Drop (BD) is available. Please contact SolarWinds Support to request the BD if you are affected by this issue.
Interim Workaround (Recommended for All Affected Versions)
|
Important: Ensure High Availability (HA) is disabled before performing the following steps to avoid unintended failover due to service restarts. |
Step 1: Enable Read Uncommitted Behavior for SWIS Queries
This setting enables READ UNCOMMITTED behavior for SWIS queries, helping reduce blocking and contention in SQL.
- Navigate to the Advanced Configuration page:
http://<solarwinds_server>/Orion/admin/advancedconfiguration/global.aspx - Search for the setting: ReadUncommittedEnabled
- Ensure it appears under: Swis.DataProviders.Sql
- Check the box to enable it
- Save changes
Step 2: Reduce Map Recalculation Frequency (Applicable only to 2025.2)
Reducing the frequency of SD-WAN map generation can ease pressure on SQL.
- In the same Advanced Configuration page, locate:
- MapFreshnessCheckInterval
- MapFreshnessCriteria
- Set both values to: 1.00:00:00 (once per day)
- Save changes
- Restart the SolarWinds Module Engine service
Next Steps:
If blocking still occurs after applying these changes:
- Collect and upload a diagnostics from the main polling engine
- Capture and provide sp_WhoIsActive output during the blocking incident
- Share the data with SolarWinds Support for continued investigation