So snapshots and discard isn't the problem but padding overhead. With your ashift of 12 and volblocksize of 16K with a 6 disk raidz3 that means that only 33% of the raw storage is usable (and of that 20% should be kept free, so actually only 26% of raw storage usable for virtual disks).
So it's expected that everything will be 150% in size, as for every 1GB of data there also will be 500MB of padding blocks stored.
If you dont want to loose so much capacity you would need to increase your volblocksize to something like 128K or even higher. But that also got it downsides...I wouldn't run DBs on that storage and so on as performance and wear of all small reads/writes will be terrible.
If your workload doesn't allow you to increase the volblocksize that high it might be better to just use a striped mirror. A striped three-way mirror (so two mirrors of 3 disks each striped together) might be an option. You will get the same 33% of usable capacity as now with your raidz3 but way better performance, faster resilvering and its very reliable too. Any two disks could fail and up to 4 disks without loosing data. Not as reliable as a raidz3 where any 3 disks could fail, but atleast the silvering is faster so shorter time that your pool would be vulnerable.