Kyle Gibson didn’t have his best stuff Saturday, and he also missed his spots more times than he liked. And that made his outing against Toronto one long grind.

Through all that, however, Gibson remained a ground ball-inducing maven. And that was enough to hold off the Blue Jays offense long enough for the Twins to score in the seventh and win 3-2 at Target Field.

Brian Dozier’s RBI triple in the seventh inning drove in Aaron Hicks and put the Twins in position to win the three-game series, which ends Sunday. Glen Perkins was given the day off, so Blaine Boyer pitched a 1-2-3 ninth to pick up only the third save of his career and his first since April 2, 2011, when he was with the Mets.

Early on, that outcome looked doubtful for the Twins because the Blue Jays stormed the bases and Gibson’s pitch count soared.

“He has had games where he gets baserunners early,” Twins manager Paul Molitor said, “but we always talk about being one pitch away, especially those one out, multiple runner situations because he can do so many ground balls.”

Gibson began the day sixth in the AL with 99 ground balls induced and 10 double play balls that tied him for first in the majors.

He allowed two runners on base in the first inning and needed a double play ball to get out of the jam.

He went to three-ball counts three times in the second inning, benefited from another double play ball and stranded two on base.

Houdini would have been proud of him in the third. Jose Reyes reached on an infield single and stole second. Gibson fell behind Jose Bautista 3-0 before intentionally walking him. Then Edwin Encarnacion walked to load the bases with one out.

Russell Martin ripped at a 2-2 pitch and hit a dribbler back to Gibson. That was the start of a 1-2-3 double play to end the inning. Three innings, three double plays.

“That was a fun one there,” Gibson said. “To make the pitch at the right time and catch the guy sitting offspeed and have it come back at you. If he hits it to my right or my left that may be a run there.”

Gibson needed 26 pitches to get through the second and 23 for the third. It was a matter of keeping the score close. And he did, getting two outs in the fifth before he was replaced by Brian Duensing. Gibson gave up two runs, one earned, on eight hits and four walks with three strikeouts — the seventh time he’s struck out three or fewer in a start this season.

“He made some big time pitches in a bunch of key situations to get some ground balls,” Dozier said.

The Twins took a 1-0 lead in the third inning on Chris Herrmann’s first home run of the season. But Kevin Pillar matched him with a solo shot in the fourth. Back-to-back doubles by Joe Mauer and Trevor Plouffe allowed the Twins to take a 2-1 lead in the fourth.

Gibson tried to hold it there, but things went haywire in the sixth when Herrmann’s throwing error while fielding a bunt allowed Martin to score the tying run. Gibson got two outs in the inning before being replaced.

The Twins took the lead for good in the seventh, when Dozier connected on an opposite-field blast that Ezequiel Carrera attempted to make a leaping catch of but had the ball pop off the heel of his glove for an RBI triple.

Not a great start, but Gibson did enough for the Twins to finish.

“This is a really good team that scores a lot of runs,” Gibson said of Toronto, “and to do that with most likely was not my best stuff, we won the game and I’ll take that every time.”