Goals David Silva, Aymeric Laporte and Bernardo Silva at the Metalist Stadium in Kharkiv swept City to the top of Group F.
David Silva also hit the woodwork twice and Raheem Sterling thumped a shot against the bar in injury time as City, who registered 24 shots, completely dominated what had been a potentially tricky game.
Asked how well his side played, City boss Guardiola said: “Incredible. Our first half was the best we have played in the last three seasons, since I’ve been here. We were outstanding, we created a lot of chances.
“We were under pressure after defeat against Lyon (in the first group game), but now we are in a good position. We can control our destiny now. It was so important to get this result and we will enjoy tonight and the next few days with this victory.
“We have recovered well from Lyon and now it’s in our hands.”
Guardiola had said in the build-up to the game that he believed City were not yet ready to win the Champions League, citing a number of factors, including suggesting that fans had not fully bought into the competition.
City, however, remain favourites for the trophy and it was put to Guardiola after the game that he may struggle to convince people of his opinions.
The former Barcelona manager said: “We played so good in the first half, but I said yesterday it’s not just about playing good or bad, there are many other things. It’s important to go step by step.
“We’ve won two away and that’s important. Now we try to go through. But it’s not just performances, there are many circumstances in the Champions League.”
If there was a downside for Guardiola, it was that his side did not take more of their chances.
He said: “We have to increase our average. We missed a lot of clear chances. When you arrive in the later stages we have to be more clinical.”
Guardiola expressed sympathy for Oleksandr Zinchenko, the young Ukrainian he left out of his matchday squad completely.
Zinchenko, 21, had been made available by City for media duties ahead of the game and there was surprise among locals he was not included against the club where he played youth football.
Guardiola said: “It was a tough decision for me to do it. I know his family and friends were here, but I had other players and I decided on them.
“I’m sorry for him and I spoke with him. He’s young and he’ll have other chances.”
Shakhtar manager Paulo Fonseca conceded his side were outplayed.
He said: “We have to admit that City were better tonight – much better. They won in good style. Our players tried to play well and keep the ball, but it was not enough to stop a team like City.”
The sides meet again at the Etihad Stadium in the next round of matches.
Fonseca said: “It will be even harder to play City in Manchester, but we will fight until the end and try to earn some points. We play to win every game and the upcoming one will be no different.”