Peavy (9-8) allowed one run and four hits in a matchup of the past two starters for the NL in the All-Star game. Peavy, the reigning Cy Young Award winner, struck out eight and lowered his ERA to 2.61 to take over the NL lead from San Francisco's Tim Lincecum (2.67).
San Diego reached Sheets (11-6) for three runs in the seventh inning after the Brewers scored in the top half against Peavy. Pinch-hitter Byron Myrow's sacrifice fly gave the Padres a 2-1 lead.
Trevor Hoffman allowed Mike Cameron's 20th homer in the ninth before finishing for career save No. 550, and his 26th in 29 chances this season.
Milwaukee entered 3 1/2 games back of NL Central-leading Chicago and four games in front of St. Louis for the wild-card lead.
Sheets gave up three runs and five hits in 6 2-3 innings. Sheets, this year's All-Star game starter, was attempting to match his career high for wins set in 2004 and equaled last season.
Neither side managed much in the first six innings as Sheets allowed only one hit and Peavy gave up two.
The Brewers went in front in the seventh when Bill Hall walked, went to second on Peavy's errant pickoff throw and scored on Cameron's single.
Sheets surrendered the lead in the bottom half, allowing the first three runners to reach. Tadahito Iguchi singled in Kevin Kouzmanoff before Myrow's flyball to left scored Chase Headley.
Cameron then robbed pinch-hitter Edgar Gonzalez of a potential home run with a catch at the top of the center-field fence, but Jody Gerut followed with an RBI single to chase Sheets.
Peavy, who broke his own two-start losing streak, also lowered his home ERA to 1.42, best in the majors.
Notes: Milwaukee lost for the third time in 15 road games. ... Peavy also leads the majors with a 1.71 ERA in day games. ... Brewers LF Ryan Braun (tightness in his lower back) missed his fifth straight game. ... Padres RHP Chris Young was placed on the 15-day DL.