Brewers manager Ron Roenicke has a lot of confidence in his burly right-hander.
"I know it's on his mind that when we need a good start, he's going to do whatever he can to give us that start," Roenicke said. "And, it's worked well for him. Just continue to give us those good starts. We need the big, strong guy to have innings and keep the run totals down."
Jake Peavy (0-3) is 0-12 in 18 outings since winning at Toronto while with Boston on April 25. He has lost five straight starts overall.
Giants manager Bruce Bochy said that it was a tough game for his team facing Peralta and three relievers.
"We saw velocity today," he said. "All the pitchers that threw at us, they had a lot of good stuff. I'm sure that's why we had 12 strikeouts."
Peavy showed some hustle in the fifth. He struck out swinging, but when the ball skipped away from catcher Jonathan Lucroy, he raced to first on the wild pitch. Peavy didn't even draw a throw and later scored on Hunter Pence's single.
Peralta might have become rattled in the past with the Giants threatening to score. Not this time.
"That's a situation where you have to calm down and make your pitches," Peralta said.
With runners at first and second and no outs, Peralta struck out Buster Posey and then got Pablo Sandoval to hit into a double play.
"I was able to do that today," Peralta said. Posey and Sandoval, those are two great hitters. I was (able to) strike out Posey, and just trying to make Sandoval make contact and get a ground ball. I was able to find it."
The key hit was missing when the Giants needed it.
"We did create some pretty good opportunities," Bochy said. "Just couldn't get that timely hit today."
Peavy gave up three runs in 5 2-3 innings in his third start since being acquired from the Red Sox.
"He battled well today," Bochy said. "He gave us a gutty effort. He kept us there in the game. Gave us a chance. That's what you want from your starter."
After escaping a first-inning jam, Peralta pitched effectively until the seventh. He left with two outs and two on, and Jeremy Jeffress retired Hunter Pence on a fly ball to preserve a 3-1 lead.
Francisco Rodriguez pitched the ninth for his 34th save.
It was 1-all until the sixth. Aramis Ramirez doubled and scored on a ground-rule double by Khris Davis, whose soft liner down the right-field line was picked up by a fan. Davis came home on Mark Reynolds' sacrifice fly to deep left.
Ryan Braun snapped a 0-for-12 skid with a RBI double in the Milwaukee first.
Giants: Outfielder Angel Pagan (back inflammation) was activated from the 15-day disabled list prior to the game and got two hits. He missed 44 games while the Giants went 18-26 with him out of the lineup. Infielder Matt Duffy was optioned to Double-A Richmond Flying Squirrels.
Brewers: Second baseman Scooter Gennett was held out of the game in a precautionary move. He played Wednesday night after missing four of the last five games with quadriceps tightness.
Giants: San Francisco opens a series at Kansas City on Friday night, with Madison Bumgarner (13-8) starting against the Royals' Jason Vargas.
Brewers: Right-hander Kyle Lohse (11-6, 3.40) starts at home on Friday night against the Los Angeles Dodgers.
Ramirez turned in a sparkling defensive play at third base in the second inning. Andrew Susac hit a hard grounder down the line that Ramirez snared with a diving grab. His momentum carried him a few steps behind the bag in foul territory. He recovered and, from his knees, he threw out Susac.