ST. PETERSBURG, Fla. (AP) -- James Shields was impressive, again.
Shields carried a three-hitter into the ninth inning, B.J. Upton had a key two-run single and the Tampa Bay Rays beat the Minnesota Twins 4-1 on Saturday night.
"He just had really good control of the game, and it looked typical of what James has done last year turning into this year," Rays manager Joe Maddon said.
Shields (3-0) allowed one run and five hits over eight-plus innings while winning his third consecutive start after getting a no-decision on opening day against the New York Yankees .
"A tough night at the plate, but guys like that do that to you," Minnesota manager Ron Gardenhire said. "We were facing a very, very good pitcher out there, Mr. Shields. He was really, really good. He's a gamer. He dominated us."
Upton's two-out hit off Carl Pavano (1-2) gave the Rays a 3-0 lead in the sixth. Another run scored on the play when center fielder Denard Span was charged with a throwing error attempting to cut down Matt Joyce at third.
"That was the deciding factor," Pavano said. "I left a pitch up and he jammed shot it into center field."
Pavano gave up three runs and seven hits in six innings. Josh Willingham singled in the ninth to tie Kirby Puckett 's team record, set in 1994, of starting a season with a 15-game hitting streak.
Tampa Bay has won its last nine home games - dating to July 21 - when Shields was the starting pitcher. Shields is 7-0 over the stretch.
Shields was pulled in the ninth after allowing Willingham's hit and a double by Justin Morneau . Ryan Doumit had a sacrifice fly off Fernando Rodney , who picked up his fifth save.
"Eight strong, I felt I did my job," Shields said.
Aided by two errors and a hit batter, Tampa Bay took a 4-0 lead in the seventh on Evan Longoria 's grounder. Longoria has seven RBIs over the past three games.
The Twins were 0 for 5 with runners in scoring position against Shields. The right-hander threw 29 pitches during the sixth, but got out of a bases-loaded jam when Doumit lined out to third for the final out of the inning.
"I was just missing, but we ended up getting out of it and I think it was a big inning in the game," Shields said. "We came back in all fired up."
Pavano induced a double-play grounder from Upton with runners on first and third in the fourth, ending the threat. One inning later, Joe Mauer , playing first base, made a diving catch on Desmond Jennings ' one-out squeeze bunt and doubled Jose Molina off third.
"I thought it was a good pitcher's duel, going back and forth," Pavano said. "Overall, we were in it until the end. We had opportunities, but Rodney came in and closed the door."
Mauer had two hits in four at-bats, and is 33 for 74 overall at Tropicana Field.
NOTES: Morneau finished 1 for 3 with a walk after not playing Friday night because of a sore right foot. "Still got a little soreness in his foot, but he ready's to get back out there," Gardenhire said. Morneau fouled a ball off the foot Thursday. ... Twins LHP Francisco Liriano (0-2) will go against RHP Jeff Niemann (0-2) in the series finale on Sunday. "If he has his fastball command, look out," Maddon said of Liriano.