"Really good effort, I think, overall," Calgary coach Darryl Sutter said.
Elias Lindholm scored twice, and Dan Vladar made 31 saves in his first start since March 19 for the Flames (43-19-9), who have won three straight, including a 4-2 win at the Anaheim Ducks on Wednesday.
"What a game from him," Tkachuk said of Vladar. "I thought he was awesome tonight. He was probably the main reason we won."
The Flames maintained their six-point lead over the second-place Edmonton Oilers in the Pacific Division. The Oilers defeated the Los Angeles Kings 3-2 on Thursday.
Nick Bonino and Logan Couture scored for the Sharks (29-32-9), who have lost five straight (0-4-1). James Reimer made 32 saves before leaving with an apparent injury. Kaapo Kahkonen made five saves in relief.
"I always come back to the same thing, it's tough to win games if you're only scoring one or two [goals]," San Jose coach Bob Boughner said. "We're trying to battle hard, and we're trying to get that puck luck and get something to happen offensively. But you look at that lineup and where they're at in the standings, they're a pretty veteran team, and I thought for our lineup with some young guys we competed hard. It's just tough to get it done."