The mega cruise ships are indeed the problem. Too many tourists at once, thousands of them. It’s like a flash flood. Also I don’t believe they contribute much to the local economy. They don’t sleep in hotels and they probably prefer to eat their prepaid meals onboard. I’m not even sure many get on gondolas, given the short time available.
The only significant contribution is the docking fees and other fees paid to the company that manages the cruise port.
The solution is greatly increase those fees, especially for large ships, and also increase the price of both transportation (including vaporetti) and museums for all all non residents, including Italians from other regions.
Someone has to tell me why visitors should be subsidized by local taxpayers and pay those low prices for transportation and museums.
It costs over $100 to visit Disneyland theme parks, why should a museum cost under 10€? Taxpayers are paying for those museum staff and that is not right. Same is true for the price of buses, regional trains, and vaporetti.
The price of transportation is subsidized by local taxpayers living in the region. Why? Those low prices should be subsidized for local commuters not for tourists.
The price system could take care of crowds better than turnstiles.