Mateo Kovacic opened the scoring seven minutes before the end of the first period, before Cristiano Ronaldo and Alvaro Morata struck after the interval as Los Blancos, who still have a game in hand over their rivals, extended their lead at the summit with a routine home success.
Real Madrid boss Zinedine Zidane made three changes to the team that drew 2-2 at Celta Vigo in the Copa del Rey on Wednesday night, with Keylor Navas, Raphael Varane and Lucas Vazquez all returning to the XI.
As for Sociedad, Eusebio Sacristan made four changes to the team that lost 5-2 at Barcelona on Thursday night. Joseba Zaldua replaced Aritz Elustondo at right-back, while there was a La Liga debut for Kevin Rodrigues on the opposite side. There were also two changes further forward as Sergio Canales and Juanmi replaced Xabi Prieto and Carlos Vela.
It was the visitors that had the first opening of the match in the fifth minute when Mikel Oyarzabal drove into the Real Madrid box and looked to pick out Willian Jose after drawing Navas out, but Varane made an important clearance.
Willian Jose then came close with a long-range free kick in the 16th minute, but Navas was on hand to make a smart save as Sociedad looked the team more likely to make the breakthrough in the opening exchanges.
Vazquez had a couple of half-chances for Real Madrid in the opening 25 minutes of action, but Ronaldo and Karim Benzema struggled to get into the match against a Sociedad team that kept the ball extremely well.
Ronaldo's first contribution of any significance arrived in the 33rd minute when he created a yard of space outside the Sociedad box before striking towards goal, but his effort arrowed wide of Geronimo Rulli's post.
Real Madrid struggled for long spells of the first period, but the home side took the lead in the 38th minute when Kovacic swept the ball under Rulli after Ronaldo's poked pass had released the Croatian in a dangerous position.
Sociedad might have levelled in the final minute of the half when a smart combination between Canales and Juanmi found the latter in space inside the Real Madrid box, but the number seven fired his effort wide of the far post as Real Madrid entered the half-time break in the Spanish capital with a one-goal advantage.
A lively start to the second period saw both teams create half-chances, but Ronaldo was denied by a fine Zaldua challenge when the Portuguese attempted to pull the trigger, before Rodrigues had a powerful strike deflected over the crossbar down the other end.
Ronaldo would not take no for an answer, however, and the number seven doubled Real Madrid's lead in the 51st minute when he chipped Rulli from a wide angle after Kovacic had released the forward with a brilliant pass.
Eusebio's response to falling two goals behind was two substitutions in the shape of Vela and Prieto, but it was difficult for Sociedad to make their mark during a period of domination from the league leaders.
Morata, reportedly unsettled at Real Madrid, replaced Benzema in the 66th minute as Zidane used his bench for the first time and the Spain international almost met a dangerous Ronaldo cross 20 minutes from time, but a smart header from Rodrigues allowed Sociedad to clear their lines.
Inigo Martinez was fortunate to escape a second booking in the 71st minute after bringing Kovacic to the deck with a clumsy challenge, and the linesman then came to Sociedad's rescue as Morata was adjudged to have been in an offside position when he headed Ronaldo's free kick home.
Martinez was always walking a fine line, however, and the Sociedad centre-back did receive his marching orders in the 74th minute when a wild tackle on Casemiro led to the referee producing a red card.
Real Madrid then scored their third goal in the 82nd minute when Morata headed a Vazquez cross into the bottom corner as Barcelona and Sevilla were made to pay for their dropped points earlier in the afternoon.
Real Madrid will attempt to make it three straight league wins when they travel to Celta Vigo next weekend, while Sociedad's challenge for a top-four position continues with a home game against Osasuna.