SCCM peer cache was introduced in 1610 as a pre-release future and eventually made it into production.
As there was quite limited documentation around the feature at the time, there have been several eager admins who have likely enabled this without understanding how it works and the consequences.
After disabling the feature in client settings, clients started to remove from the Super Peers list however not all.
To check the Super Peers list you will need go to the SQL database your SCCM instance is hosted on.
Select * from SuperPeers
The symptoms you will are slow OS deployement, slow applications download (Downloading stuck 0% for a while) from Software Center, or even when deploying updates.
CAS.log reported a long download locations list before the SCCM was even considered, so the server still reports these sources as active peer cache clients.
DataTransferService.log then reports a bunch of errors, because the feature is disabled on clients and content can’t be reached, then the client waits a bunch of seconds and proceeds with the next download location.
During OS deployment I noticed that placing a computer on the same subnet as the SCCM distribution point, it is considered first in the list, so the issue is … work-arounded?
I didn’t understand at first if this was BranchCache or PeerCache related. I tried a lot of things: re-enabling the feature then disable it again, changed my boundaries and boundary groups so that they are managed by IP address range, removed the “Allow clients to share content[…]” from applications (which is BranchCache related).
This is the exact case. Read it, because this is gold. Even the introduction and myth-busting about BranchCache and PeerCache is worth a read.
The setting is disabled on computers, but the site server is not aware. Apparently there’s an issue when the client sends back a state message stating to the site server, I’m not a superpeer, remove me from the list.
Verifying the WMI informations on a “guilty” computer (one of those appearing in CAS.LOG) with WMI Explorer
The setting is consistent with the deployed client settings. So the computer knows.
Let’s see if the client is in the “SuperPeers” table on the DB
Select * from System_DISC where Name0 like ‘ComputerName_still_in_Superpeer_list’
get the ItemKey from there, and
Select * from SuperPeers where ResourceID = ‘ItemKey’
So the client is still a SuperPeer for SCCM, and the same ResourceID also appears in SuperPeerContentMap for every application or package it is (was) able to distribute.
Select * from SuperPeerContentMap where ResourceID = ‘ItemKey’
So, how do we get rid of this data (which is now complete garbage, since I disabled the setting globally) ?
As always make a backup of your database before running these commands. This will delete all the table information for Peer Cache information.
delete from SuperPeerContentMap delete from SuperPeers
Test again from your clients to verify that everything now works!