Before the seventh inning, Minnesota was a paltry 0-for-6 with runners in scoring position, which made it nearly impossible to overcome the three home runs that starter Phil Hughes (6-2) gave up in six innings of work.
"I don't think he had his best stuff tonight," manager Ron Gardenhire said. "He missed a little bit. He's been so good for us, anything he gives up is kind of a 'what happened' type of thing right now."
The Astros waited until the third to pounce on Hughes, who was coming off an excellent eight-inning, six-strikeout win at New York last Sunday.
Marwin Gonzalez -- the ninth hitter in Houston's order -- knocked a solo home run out in the top half, and then Matt Dominguez followed suit with a solo shot to center field an inning later.
Things got worse in the sixth.
Dexter Fowler laced a Hughes pitch past Joe Mauer's glove and down the right-field line. Right fielder Jason Kubel bobbled the ball in the corner, and Fowler advanced to third. Jose Altuve then drove Fowler in with a single, and George Springer drove an opposite-field home run to right for a 5-0 lead.
"You can live with the two solo homers through five, and then the sixth inning, you kind of gave the game away right there, so that was tough," Hughes said.
All three home runs off the Twins starter came on 91-mph four-seam fastballs.
"I didn't have my best fastball tonight," Hughes said. "I just wasn't making adjustments the way I have before. I didn't recognize it early enough to make some better pitches with the two-seamer or the cutter. I tried to generate some extra velocity and came out of my mechanics a little bit and just left some balls over the plate."
Minnesota's offensive chances were many -- the Twins got on base with no outs in the fourth, fifth, sixth and seventh innings. All of those opportunities were followed by three straight outs.
Houston starter Dallas Keuchel was adept at minimizing the damage. He lowered his season ERA to 2.50 by shutting down Minnesota batters at the first sign of a threat, and picked up his seventh win of the season.
"My dad texted me and told me that was my career high already," Keuchel said of his win total. "It's exciting. That just means the team's playing better and I pride myself on going out there on trying to give the team the best possible opportunity to win the game every fifth day and right now we're playing great. We're going to try to keep this roll going."
He recorded six strikeouts, but was pulled after six innings because of a high 101-pitch count.
That's when the home fans -- who sat through an 81-minute delay before the first pitch thanks to an ominous forecast that never lived up to expectations -- finally got something to cheer about. Tony Sipp, who came into the game with a 0.93 ERA on the year, replaced Keuchel and ran into trouble.
Eduardo Escobar doubled off the left-field wall -- the Twins' fourth straight inning with a leadoff baserunner -- and Aaron Hicks made it count. He blooped a single to right field that got under Springer's glove to bring in Escobar and end the RISP drought.
Then, designated hitter Danny Santana rocked his first career home run to left field, and the Twins were within two runs.
"That happens sometimes," said Santana, who hit 25 home runs in the Minors. "I'm a contact hitter."
The momentum seemed to end at that point -- Sipp calmed down to retire Brian Dozier and Mauer, and then Jerome Williams got Josh Willingham to pop out to end Minnesota's big inning.
The Twins were not done, however.
After Fowler made a spectacular diving catch to rob Plouffe of extra bases in the eighth, Kurt Suzuki and Escobar laced back-to-back doubles that brought Minnesota within one run.
Then, one night after hitting a grand slam and later mildly spraining his right foot on the basepaths, Oswaldo Arcia pinch hit for Hicks (2-for-2 with a walk). Given the right-handed matchup with pitcher Darin Downs and Arcia's recent hot streak, Gardenhire didn't have any reservations about his choice.
"That was a really easy decision," the manager said.
With the fans on their feet in anticipation, Arcia took the first pitch to center and into Fowler's glove.
In the ninth, Joe Mauer reached second after a throwing error and a stolen base, but Chad Qualls retired Willingham to pick up his seventh save of the season for the Astros.
"They're trying to do what we're doing," Gardenhire said. "Trying to get back on the right side of this thing."